国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種可重定位程序的加載及調(diào)試方法及系統(tǒng)的制作方法

      文檔序號:6583631閱讀:218來源:國知局

      專利名稱::一種可重定位程序的加載及調(diào)試方法及系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      :本發(fā)明涉及通信領(lǐng)域,尤其涉及一種嵌入式系統(tǒng)中動態(tài)加載的可重定位程序的加載及調(diào)試方法及系統(tǒng)。
      背景技術(shù)
      :隨著科技術(shù)的發(fā)展,人們對手機的需求呈現(xiàn)PC(PersonalComputer,個人計算機)化驅(qū)勢,所需的應(yīng)用程序越來越多。目前智能手機基本都實現(xiàn)了動態(tài)加載技術(shù),類似于PC上的動態(tài)鏈接庫(Windows)或者動態(tài)共享文件(Li皿x),可動態(tài)加載應(yīng)用;而大多非智能手機中尚未實現(xiàn)動態(tài)加載技術(shù)。由于動態(tài)加載技術(shù)不僅可以提高軟件開發(fā)效率,按需加載節(jié)省硬件資源,而且也滿足了電信運營商不斷擴展附加增值業(yè)務(wù)和手機用戶隨時下載使用新功能的需求,因此在非智能手機中實現(xiàn)動態(tài)加載技術(shù)是其發(fā)展的一個必然趨勢。隨之而然,與該技術(shù)相輔相成的調(diào)試方法也成為決定其技術(shù)價值與實用價值的重要因素。現(xiàn)有的嵌入式系統(tǒng)調(diào)試方法大致分為通過設(shè)計駐留監(jiān)控軟件、實現(xiàn)JTAG(JointTestActionGroup,聯(lián)合測試行為組織)調(diào)試器及采用在線調(diào)試器三種方式,其中使用JTAG調(diào)試器是開發(fā)過程中最常使用的一種調(diào)試方式。目前已有的調(diào)試方法均是基于這三種方式,對其實現(xiàn)進行改造,在調(diào)試過程中監(jiān)控所關(guān)注的調(diào)試信息,并且以便于理解的方式輸出調(diào)試信息。且這些調(diào)試方法都是用于調(diào)試經(jīng)過編譯、鏈接之后的可執(zhí)行目標代碼,對于可重定位的目標代碼的調(diào)試及動態(tài)加載可重定位程序的調(diào)試方法尚未涉及??芍囟ㄎ晃募母袷接卸喾N,如微軟的PE(PortableExecutable,可移植的可執(zhí)行文件)格式、Unix/li皿x的ELF(ExecutableandLinkableFormat,可執(zhí)行可鏈接格式)格式。動態(tài)加載的可重定位文件使用的ELF格式的鏈接視圖,因此可重定位文件的調(diào)試方法也是針對ELF格式的可重定位文件。但目前存在的調(diào)試工具無法直接載入可重定位文件進行調(diào)試。
      發(fā)明內(nèi)容本發(fā)明要解決的一個技術(shù)問題是提供一種可重定位程序的加載方法,使得調(diào)試工具能夠直接載入由可重定位文件通過特定方式生成的可執(zhí)行文件,進行可重定位程序的調(diào)試。為了解決上述問題,本發(fā)明提供了一種可重定位程序的加載方法,應(yīng)用于先進的精簡指令集處理器(ARM)編譯系統(tǒng),該方法包括按照ARM映像文件中輸入段的順序加載可重定位程序;將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件。進一步地,所述按照ARM映像文件中輸入段的順序加載可重定位程序的過程具體包括比較所述可重定位程序載入內(nèi)存過程中輸入段的順序與ARM映像文件中輸入段的順序是否相同,如果相同,則直接將所述可重定位程序中可加載的節(jié)區(qū)載入內(nèi)存,否則,將所述可重定位程序中可加載的節(jié)區(qū)按照ARM映像文件中輸入段的順序載入內(nèi)存。進一步地,在進行所述比較之前,通過以下方式查看所述可重定位程序載入內(nèi)存過程中輸入段的順序所述可重定位程序載入內(nèi)存過程中的按節(jié)區(qū)類型進行段分類時,通過添加打印信息,或者通過調(diào)試工具查看所述節(jié)區(qū)的分類排列順序。進一步地,所述將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件的過程具體包括對ARM編譯鏈接器的鏈接過程參數(shù)設(shè)置進行修改;利用ARM編譯鏈接器將所述可重定位程序編譯鏈接生成可執(zhí)行可鏈接格式(ELF)文件。進一步地,所述對ARM編譯鏈接器的鏈接過程參數(shù)設(shè)置進行的修改具體包括在ARM編譯鏈接器中設(shè)置不掃描C庫選項,用于在鏈接過程中不掃描C/C++運行時庫;設(shè)置未定義符號選項,用于將所有未定義的符號指向同一個已存在的符號;設(shè)置不刪除選項,用于在鏈接過程中保留所有段;設(shè)置生成映像文件的入口、輸出段屬性為只讀的輸出段加載時地址值和屬性為可讀寫的輸出段加載時地址值。進一步地,所述未定義的符號指向的所述已存在的符號為所述可重定位程序默認的啟動接口名,或者所述可重定位程序中任一個已存在的符號。本發(fā)明要解決的另一個技術(shù)問題是提供一種可重定位程序的調(diào)試方法及系統(tǒng),可以方便地對實現(xiàn)對動態(tài)加載的可重定位程序進行調(diào)試。為了解決上述問題,本發(fā)明提供了一種可重定位程序的調(diào)試方法,應(yīng)用于ARM編譯系統(tǒng),該方法包括按照ARM映像文件中輸入段的順序加載可重定位程序;將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件;將所述可執(zhí)行文件載入調(diào)試工具中,實現(xiàn)對所述可重定位程序的調(diào)試。進一步地,所述將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件的過程具體包括對ARM編譯鏈接器的鏈接過程參數(shù)設(shè)置進行修改;利用ARM編譯鏈接器將所述可重定位程序編譯鏈接生成可執(zhí)行ELF文件。進一步地,所述對ARM編譯鏈接器的鏈接過程參數(shù)設(shè)置進行的修改具體包括在ARM編譯鏈接器中設(shè)置不掃描選項,用于在鏈接過程中不掃描C/C++運行時庫;設(shè)置未定義符號選項,用于將所有未定義的符號指向同一個已存在的符號;設(shè)置不刪除選項,用于在鏈接過程中保留所有段;設(shè)置生成映像文件的入口(entry)、輸出段屬性為只讀的輸出段加載時地址值(ro_baSe)和屬性為可讀寫的輸出段加載時地址值(rw_baSe)。進一步地,所述ro—base的值設(shè)置為所述可重定位程序載入內(nèi)存的實際代碼段加載地址,或為默認值;當實際數(shù)據(jù)段加載地址與所述可執(zhí)行文件可執(zhí)行數(shù)據(jù)段地址不一致時,所述rw_base的值設(shè)置為所述可重定位程序載入內(nèi)存的實際數(shù)據(jù)段加載地址。進一步地,所述將所述可執(zhí)行文件載入調(diào)試工具中的過程具體包括在動態(tài)加載的可重定位程序載入內(nèi)存之后,確定所述可重定位程序的實際加載地址,包括實際代碼段加載地址和數(shù)據(jù)段實際加載地址;按照以下方式確定所述可執(zhí)行文件載入調(diào)試工具的加載地址后,將所述可執(zhí)行文件載入調(diào)試工具中所述可執(zhí)行文件的數(shù)據(jù)段的加載地址為所述rw—base的值;當所述ro—base的值設(shè)置為默認值或者為實際代碼段加載地址時,所述可執(zhí)行文件的代碼段加載偏移地址值為所述實際代碼段加載地址減去所述ro_baSe的值。本發(fā)明還提供了一種可重定位程序的調(diào)試系統(tǒng),包括加載裝置、編譯鏈接裝置和調(diào)試工具,其中所述加載裝置用于,按照ARM映像文件中輸入段的順序加載可重定位程序;所述編譯鏈接裝置用于,將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件;所述調(diào)試工具用于,載入所述可執(zhí)行文件,實現(xiàn)對所述可重定位程序的調(diào)試。進一步地,所述編譯鏈接裝置為ARM編譯鏈接器,且對該ARM編譯鏈接器的鏈接過程參數(shù)進行如下修改在ARM編譯鏈接器中設(shè)置不掃描選項,用于在鏈接過程中不掃描C/C++運行時庫;設(shè)置未定義符號選項,用于將所有未定義的符號指向同一個已存在的符號;設(shè)置不刪除選項,用于在鏈接過程中保留所有段;設(shè)置生成映像文件的入口(entry)、輸出段屬性為只讀的輸出段加載時地址值(ro_baSe)和屬性為可讀寫的輸出段加載時地址值(rw_baSe)。綜上所述,本發(fā)明提供了一種嵌入式系統(tǒng)中動態(tài)加載可重定位文件的加載及調(diào)試方法,至少具有如下有益效果對動態(tài)加載可重定位文件的調(diào)試方法進行了研究,解決了動態(tài)加載可重定位文件時,無法獲取到加載后可重定位文件的符號信息,無法直接進行代碼調(diào)試的難題;實現(xiàn)了對動態(tài)加載的動態(tài)程序的調(diào)試,滿足了開發(fā)要求,且實現(xiàn)了應(yīng)用程序與平臺獨立開發(fā)編譯,在調(diào)試過程中,只需要編譯做了修改的動態(tài)加載程序,拷貝到文件系統(tǒng)中重新加載即可,無需對平臺版本重新制作、燒錄,節(jié)省了大量的時間,使精力主要花費在調(diào)試應(yīng)用本身,極大的提高應(yīng)用開發(fā)效率,為通過加載可重定位文件實現(xiàn)動態(tài)加載技術(shù)奠定了堅實的應(yīng)用基礎(chǔ)。以下結(jié)合附圖的詳細描述,將更清楚地理解本發(fā)明每個步驟實施的原因、方法、特征和優(yōu)點,其中圖1為現(xiàn)有技術(shù)中動態(tài)載入映像文件的輸入段順序圖;圖2為Arm編譯鏈接生成的可執(zhí)行文件的輸入段順序圖;圖3為本發(fā)明應(yīng)用實例中使用Trace32調(diào)試工具載入過程的示意圖。具體實施例方式本發(fā)明的核心思想是首先按照ARM(AdvancedRISCMachines,先進的精簡指令集處理器技術(shù))映像文件中輸入段的順序加載可重定位程序到內(nèi)存中,然后將該可重定位程序經(jīng)過ARM編譯鏈接器編譯鏈接生成可執(zhí)行文件,并將其載入調(diào)試工具中獲取可重定位程序的符號信息,實現(xiàn)對動態(tài)加載的可重定位程序的加載及調(diào)試。由于動態(tài)加載可重定位程序的過程是將可重定位程序抽取出"text(代碼)段"、"data(數(shù)據(jù))段"、"bss(未初始化數(shù)據(jù))段"載入內(nèi)存后再進行鏈接的過程,所以加載后的可重定位文件的符號表不可見,無法對動態(tài)程序進行直觀調(diào)試。因此,需要將可重定位文件生成可執(zhí)行文件,以便載入調(diào)試工具中獲取其符號信息。另外,由于動態(tài)加載可重定位程序?qū)崿F(xiàn)的簡化版鏈接器與ARM編譯鏈接器的鏈接過程不同,因此會導(dǎo)致雖然存在符號信息,但符號信息與代碼實際地址不符合的情況,仍然無法進行正確調(diào)試。因此,還需要對動態(tài)加載過程進行修改。基于上述思想,本發(fā)明提供的實現(xiàn)動態(tài)加載可重定位程序的加載方法主要包括如下步驟1.比較動態(tài)加載可重定位程序載入內(nèi)存過程中與ARM映像文件中輸入段的順序;2.修改動態(tài)加載可重定位程序載入內(nèi)存過程中的輸入段順序;3.調(diào)節(jié)ARM編譯鏈接過程,通過ARM編譯鏈接器將可重定位ELF文件生成可執(zhí)行ELF文件。經(jīng)過上述加載過程,將生成的該ELF文件加載到Trace32中,可重定位程序的符號表就在Trace32中可見并可以正確調(diào)試了。在上述加載方法的基礎(chǔ)上,本發(fā)明提供了一種動態(tài)加載可重定位程序的調(diào)試方法,其主要包括如下步驟1.比較動態(tài)加載可重定位程序載入內(nèi)存過程中與ARM映像文件中輸入段的順序;2.修改動態(tài)加載可重定位程序載入內(nèi)存過程中輸入段的順序;3.調(diào)節(jié)ARM編譯鏈接過程,通過ARM編譯鏈接器將可重定位ELF文件生成可執(zhí)行ELF文件;4,生成的該ELF文件加載到Trace32進行調(diào)試。由上可知,本發(fā)明通過比較動態(tài)加載可重定位程序?qū)崿F(xiàn)的簡化版鏈接器與ARM編譯鏈接器的鏈接過程,分析其不同之處,修改各自的鏈接過程參數(shù),保證其鏈接過程一致;然后使用ARM編譯鏈接器,設(shè)定其特定的鏈接參數(shù),將可重定位程序鏈接成可執(zhí)行的ELF文件,便可將該ELF文件加載到Trace32中,實現(xiàn)可重定位程序的正確調(diào)試。下面結(jié)合附圖及具體實施例對本發(fā)明技術(shù)方案的實施過程作進一步的詳細描述。如圖l所示,現(xiàn)有技術(shù)中,動態(tài)載入映像文件的輸入段順序是"text段"、"data段"、"bss段"。其中,i.LEAddltem,i.LEMarkltem等均為text段。而根據(jù)ARM映像文件中輸入段的排序規(guī)則知,其排列順序是按輸入段的屬性來排序的,即按照只讀的代碼段、只讀的數(shù)據(jù)段、可讀寫的數(shù)據(jù)段、其它已經(jīng)初始化的數(shù)據(jù)段及未初始化的數(shù)據(jù)段來進行排列的,對于具有相同屬性的輸入段,則按照輸入段的名稱ASCII(AmericanStandardCodeforlnformationInterchange,美國信息交換標準代石馬)碼序進行排序。因此,為了保證動態(tài)載入內(nèi)存的映像文件輸入段順序與使用ARM編譯鏈接器將可重定位文件生成可執(zhí)行文件的輸入段順序相同,本發(fā)明優(yōu)選實施例中,在實現(xiàn)動態(tài)加載的過程中,將可加載的節(jié)區(qū)也按照該順序裝入內(nèi)存中,如圖2中示出了ARM編譯鏈接生成的可執(zhí)行文件的輸入端順序。這樣就可以解決動態(tài)加載程序的符號信息與實際代碼不符合的問題。另外,由于ARM編譯鏈接器的優(yōu)化功能會刪除重復(fù)的代碼段和未使用的段,而動態(tài)加載實現(xiàn)的僅僅是一個簡單的鏈接器,并不具備刪除功能,因此需要通過設(shè)置ARM的某些鏈接屬性,要求鏈接過程不刪除這些段,來保證動態(tài)加載程序的符號信息與實際調(diào)試代碼符合。本實施例中,對動態(tài)加載過程進行上述改造之后,使用ARM編譯鏈接器通過以下方式將可重定位文件鏈接生成可執(zhí)行文件由于該文件是可重定位文件,直接鏈接生成可執(zhí)行文件會因為部分未定義符號而鏈接失敗,因此需要通過一n0_SCanlib、一unresolved等選項來控制,使其鏈接過程中不掃描C/C++運行時庫,及所有未定義的符號都指向同一個已存在的符號。另外還需要通過一entry指定其初始入口點,及通過一ro—base、一rw_base指定其RO屬性的輸出段的加載時地址與RW屬性的輸出段的加載時地址。這樣可重定位文件就可以成功鏈接生成可執(zhí)行文件,且其加載地址與動態(tài)加載過程的加載地址符合。以下對本實施例的可重定位程序的加載及調(diào)試過程作更詳細的描述。該過程包括如下步驟步驟一,比較動態(tài)加載可重定位程序載入內(nèi)存過程中輸入段的順序與ARM映像文件中輸入段的順序是否相同,如果相同,則執(zhí)行步驟三,否則,執(zhí)行步驟二;具體地,在動態(tài)加載實現(xiàn)過程中的按節(jié)區(qū)類型進行段分類("text段"、"data段"、"bss段"三段,每個段可能包括多個節(jié)區(qū))時,通過添加打印信息,或者通過調(diào)試工具查看其節(jié)區(qū)的分類排列順序。特別是代碼段節(jié)區(qū)的排列順序,是否是按只讀的代碼段、只讀的數(shù)據(jù)段的順序排序。只讀代碼段又是否根據(jù)節(jié)區(qū)的名稱的ASCII碼序進行排序;只讀的數(shù)據(jù)段的排序又是否按constdata(常量數(shù)據(jù))、conststring(常量字符串)的順序來進行排序。最后排列數(shù)據(jù)段和bss段節(jié)區(qū)。步驟二,按照ARM映像文件的輸入段順序修改動態(tài)加載可重定位程序載入內(nèi)存過程中的輸入段順序,并執(zhí)行步驟三;對動態(tài)加載可重定位程序載入內(nèi)存過程中的輸入段順序進行修改,以確保其載入內(nèi)存的段順序是按照只讀的代碼段、只讀的數(shù)據(jù)段、可讀寫的數(shù)據(jù)段、其它已經(jīng)初始化的數(shù)據(jù)段及未初始化的數(shù)據(jù)段來進行排列的,對于屬性相同的輸入段,則還需要根據(jù)輸入段的名稱ASCII碼序進行排序,最后按該排列好的順序裝載入內(nèi)存中。按此順序修改載入內(nèi)存過程中輸入段順序之后基本可以保證加載到內(nèi)存中的代碼與實際載入到調(diào)試工具中的代碼一致,但想要達到完全一致的效果,還需要采取步驟三所述的操作。步驟三,調(diào)節(jié)ARM編譯鏈接過程,將可重定位ELF文件通過ARM編譯鏈接器生成可執(zhí)行ELF文件;由于可重定位ELF文件中存在部分未定義的符號,所以要保證其正確鏈接生成可執(zhí)行ELF文件需要添加某些特殊的鏈接選項。首先,添加一n0_SCanlib(不掃描C庫)選項,不掃描默認的c/c++運行時庫來解析各目標文件中被引用的符號。并添加一unresolvedsymbol(未定義符號)選項,使所有未定義的符號都指向同一個已存在的符號symbol。symbol可以由用戶自己設(shè)置,只要是可重定位文件中已定義的符號即可。一般來講,現(xiàn)有的可重定位程序(動態(tài)程序)都有一個默認的啟動接口,因此,優(yōu)選地,該symbol可指定為默認的啟動接口名。其次,添加一no—remove(不刪除)選項,使ARM連接器在鏈接過程中不要刪除沒有使用的段,保留所有段。其目的是為了和動態(tài)加載載入內(nèi)存中的輸入段一致,因為動態(tài)加載過程中實現(xiàn)的簡單鏈接器暫時還無法辨認沒有使用的段,也不會刪除沒有使用的段。最后需要設(shè)置其生成映像文件的入口、輸出段屬性為RO(只讀)的輸出段加載時地址值及屬性為RW(可讀寫)的輸出段加載時地址值,即entry、--ro_base及-rw_baSe選項。其中,一roj3ase可以手動設(shè)置為可重定位程序載入內(nèi)存的實際代碼段加載地址;或者,也可以不設(shè)置,默認值為0x8000。而--rw_baSe屬性在實際數(shù)據(jù)段加載地址與生成ELF可執(zhí)行數(shù)據(jù)段地址不一致時則必須手動設(shè)置,將-rw_base的值設(shè)置為可重定位程序載入內(nèi)存的實際數(shù)據(jù)段加載地址,從而保證數(shù)據(jù)段數(shù)據(jù)的值的正確性。經(jīng)過以上設(shè)置,就可以將可重定位ELF文件通過ARM編譯鏈接器生成與之相對應(yīng)的用于Trace32調(diào)試可執(zhí)行ELF文件。調(diào)試的具體操作方法見步驟四。步驟四,載入Trace32中進行調(diào)試。在動態(tài)加載的可重定位程序載入內(nèi)存之后,就可以對其進行調(diào)試了。首先,需要確定實際載入內(nèi)存中的可重定位程序的實際加載地址,包括代碼段和數(shù)據(jù)段的載入地址值。其次,使用Trace32加載步驟三所生成的可執(zhí)行ELF文件,需要注意的是,當ro_base的值為實際代碼段加載地址時,加載地址就是所述實際代碼段加載地址,加載偏移地址值為0;當ro_base采用默認值時,如圖3所示,要使得加載地址為實際代碼段加載地址(textAddress),則加載偏移地址值=實際加載地址-ro_baSe的值。按照此方式加載,不管ro3ase怎么設(shè)定,通過偏移可以保證正確加載到實際代碼段加載地址。而數(shù)據(jù)段的加載地址值為rw_base的值。最后,按上述步驟加載成功之后,就可以獲得可重定位動態(tài)加載程序的符號信息進行調(diào)試了。此外,本發(fā)明實施例中還提供了一種可重定位程序的調(diào)試系統(tǒng),包括加載裝置、編譯鏈接裝置和調(diào)試工具,其中加載裝置用于,按照ARM映像文件中輸入段的順序加載可重定位程序;編譯鏈接裝置用于,將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件;調(diào)試工具用于,載入所述可執(zhí)行文件,實現(xiàn)對所述可重定位程序的調(diào)試。進一步地,所述編譯鏈接裝置為ARM編譯鏈接器,且對該ARM編譯鏈接器的鏈接過程參數(shù)進行如下修改在ARM編譯鏈接器中設(shè)置不掃描選項,用于在鏈接過程中不掃描C/C++運行時庫;設(shè)置未定義符號選項,用于將所有未定義的符號指向同一個已存在的符號;設(shè)置不刪除選項,用于在鏈接過程中保留所有段;設(shè)置生成映像文件的入口(entry)、輸出段屬性為只讀的輸出段加載時地址值(ro_baSe)和屬性為可讀寫的輸出段加載時地址值(rw_baSe)。以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。本發(fā)明還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當可根據(jù)本發(fā)明的技術(shù)方案及其構(gòu)思進行相應(yīng)的等同改變或替換,但這些相應(yīng)的改變或替換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護范圍。權(quán)利要求一種可重定位程序的加載方法,其特征在于,應(yīng)用于先進的精簡指令集處理器(ARM)編譯系統(tǒng),該方法包括按照ARM映像文件中輸入段的順序加載可重定位程序;將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件。2.如權(quán)利要求l所述的方法,其特征在于,所述按照ARM映像文件中輸入段的順序加載可重定位程序的過程具體包括比較所述可重定位程序載入內(nèi)存過程中輸入段的順序與ARM映像文件中輸入段的順序是否相同,如果相同,則直接將所述可重定位程序中可加載的節(jié)區(qū)載入內(nèi)存,否則,將所述可重定位程序中可加載的節(jié)區(qū)按照ARM映像文件中輸入段的順序載入內(nèi)存。3.如權(quán)利要求2所述的方法,其特征在于,在進行所述比較之前,通過以下方式查看所述可重定位程序載入內(nèi)存過程中輸入段的順序所述可重定位程序載入內(nèi)存過程中的按節(jié)區(qū)類型進行段分類時,通過添加打印信息,或者通過調(diào)試工具查看所述節(jié)區(qū)的分類排列順序。4.如權(quán)利要求1、2或3所述的方法,其特征在于,所述將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件的過程具體包括對ARM編譯鏈接器的鏈接過程參數(shù)設(shè)置進行修改;利用ARM編譯鏈接器將所述可重定位程序編譯鏈接生成可執(zhí)行可鏈接格式(ELF)文件。5.如權(quán)利要求4所述的方法,其特征在于,所述對ARM編譯鏈接器的鏈接過程參數(shù)設(shè)置進行的修改具體包括在ARM編譯鏈接器中設(shè)置不掃描C庫選項,用于在鏈接過程中不掃描C/C++運行時庫;設(shè)置未定義符號選項,用于將所有未定義的符號指向同一個已存在的符號;設(shè)置不刪除選項,用于在鏈接過程中保留所有段;設(shè)置生成映像文件的入口、輸出段屬性為只讀的輸出段加載時地址值和屬性為可讀寫的輸出段加載時地址值。6.如權(quán)利要求5所述的方法,其特征在于,所述未定義的符號指向的所述已存在的符號為所述可重定位程序默認的啟動接口名,或者所述可重定位程序中任一個已存在的符號。7.—種可重定位程序的調(diào)試方法,其特征在于,應(yīng)用于ARM編譯系統(tǒng),該方法包括按照ARM映像文件中輸入段的順序加載可重定位程序;將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件;將所述可執(zhí)行文件載入調(diào)試工具中,實現(xiàn)對所述可重定位程序的調(diào)試。8.如權(quán)利要求7所述的方法,其特征在于,所述將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件的過程具體包括對ARM編譯鏈接器的鏈接過程參數(shù)設(shè)置進行修改;利用ARM編譯鏈接器將所述可重定位程序編譯鏈接生成可執(zhí)行ELF文件。9.如權(quán)利要求8所述的方法,其特征在于,所述對ARM編譯鏈接器的鏈接過程參數(shù)設(shè)置進行的修改具體包括在ARM編譯鏈接器中設(shè)置不掃描選項,用于在鏈接過程中不掃描C/C++運行時庫;設(shè)置未定義符號選項,用于將所有未定義的符號指向同一個已存在的符號;設(shè)置不刪除選項,用于在鏈接過程中保留所有段;設(shè)置生成映像文件的入口(entry)、輸出段屬性為只讀的輸出段加載時地址值(ro_base)和屬性為可讀寫的輸出段加載時地址值(rw_baSe)。10.如權(quán)利要求9所述的方法,其特征在于,所述ro_base的值設(shè)置為所述可重定位程序載入內(nèi)存的實際代碼段加載地址,或為默認值;當實際數(shù)據(jù)段加載地址與所述可執(zhí)行文件可執(zhí)行數(shù)據(jù)段地址不一致時,所述rwj3ase的值設(shè)置為所述可重定位程序載入內(nèi)存的實際數(shù)據(jù)段加載地址。11.如權(quán)利要求io所述的方法,其特征在于,所述將所述可執(zhí)行文件載入調(diào)試工具中的過程具體包括在動態(tài)加載的可重定位程序載入內(nèi)存之后,確定所述可重定位程序的實際加載地址,包括實際代碼段加載地址和數(shù)據(jù)段實際加載地址;按照以下方式確定所述可執(zhí)行文件載入調(diào)試工具的加載地址后,將所述可執(zhí)行文件載入調(diào)試工具中所述可執(zhí)行文件的數(shù)據(jù)段的加載地址為所述rw—base的值;當所述ro—base的值設(shè)置為默認值或者為實際代碼段加載地址時,所述可執(zhí)行文件的代碼段加載偏移地址值為所述實際代碼段加載地址減去所述ro_baSe的值。12.—種可重定位程序的調(diào)試系統(tǒng),其特征在于,包括加載裝置、編譯鏈接裝置和調(diào)試工具,其中所述加載裝置用于,按照ARM映像文件中輸入段的順序加載可重定位程序;所述編譯鏈接裝置用于,將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件;所述調(diào)試工具用于,載入所述可執(zhí)行文件,實現(xiàn)對所述可重定位程序的調(diào)試。13.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述編譯鏈接裝置為ARM編譯鏈接器,且對該ARM編譯鏈接器的鏈接過程參數(shù)進行如下修改在ARM編譯鏈接器中設(shè)置不掃描選項,用于在鏈接過程中不掃描C/C++運行時庫;設(shè)置未定義符號選項,用于將所有未定義的符號指向同一個已存在的符號;設(shè)置不刪除選項,用于在鏈接過程中保留所有段;設(shè)置生成映像文件的入口(entry)、輸出段屬性為只讀的輸出段加載時地址值(ro_base)和屬性為可讀寫的輸出段加載時地址值(rw_baSe)。全文摘要本發(fā)明公開了一種可重定位程序的加載及調(diào)試方法及系統(tǒng),其中所述調(diào)試方法包括按照ARM映像文件中輸入段的順序加載可重定位程序;將加載的所述可重定位程序編譯鏈接生成可執(zhí)行文件;將所述可執(zhí)行文件載入調(diào)試工具中,實現(xiàn)對所述可重定位程序的調(diào)試。本發(fā)明實現(xiàn)了對動態(tài)加載的動態(tài)程序的調(diào)試,解決了動態(tài)加載可重定位文件時,無法獲取到加載后可重定位文件的符號信息,無法直接進行代碼調(diào)試的難題。文檔編號G06F11/36GK101706725SQ20091022154公開日2010年5月12日申請日期2009年11月20日優(yōu)先權(quán)日2009年11月20日發(fā)明者何海建,武曉慧申請人:中興通訊股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1