亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

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

文檔序號(hào):6583631閱讀:219來源:國(guó)知局

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