<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > arm-linux-gcc/ld/objcopy/objdump參數(shù)

          arm-linux-gcc/ld/objcopy/objdump參數(shù)

          作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
          arm-linux-gcc -wall -O2 -c -o $@ $<-o 只激活預(yù)處理,編譯,和匯編,也就是他只把程序做成obj文件-Wall 指定產(chǎn)生全部的警告信息-O2 編譯器對(duì)程序提供的編譯優(yōu)化選項(xiàng),在編譯的時(shí)候使用該選項(xiàng),可以使生成的執(zhí)行文件的執(zhí)行效率提高-c 表示只要求編譯器進(jìn)行編譯,而不要進(jìn)行鏈接,生成以源文件的文件名命名但把其后綴由 .c 或 .cc 變成 .o 的目標(biāo)文件-S 只激活預(yù)處理和編譯,就是指把文件編譯成為匯編代碼arm-linux-ld直接指定代碼段,數(shù)據(jù)段,BSS段的起始地址-Ttest startaddr-Tdata startaddr-Tbss startaddr

          示例:Arm-linux-ld –Ttext 0x0000000 –g led.o –o led_elf

          本文引用地址:http://www.ex-cimer.com/article/201611/319394.htm

          使用連接腳本設(shè)置地址:Arm-linux-ld –Ttimer.lds –o timer_elf $^其中timer.lds 為連接腳本

          完整的連接腳本格式:SECTIONS{…Secname start ALING(aling) (NOLOAD):AT(ldaddr){contents} > region:phdr=fill…..}

          arm-linux-objcopy被用來(lái)復(fù)制一個(gè)目標(biāo)文件的內(nèi)容到另一個(gè)文件中,可用于不同源文件的之間的格式轉(zhuǎn)換示例:Arm-linux-objcopy –o binary –S elf_file bin_file

          常用的選項(xiàng):input-file , outflie輸入和輸出文件,如果沒(méi)有outfile,則輸出文件名為輸入文件名

          2.-l bfdname或—input-target=bfdname用來(lái)指明源文件的格式,bfdname是BFD庫(kù)中描述的標(biāo)準(zhǔn)格式名,如果沒(méi)指明,則arm-linux-objcopy自己分析

          3.-O bfdname 輸出的格式

          4.-F bfdname 同時(shí)指明源文件,目的文件的格式

          5.-R sectionname 從輸出文件中刪除掉所有名為sectionname的段

          6.-S 不從源文件中復(fù)制重定位信息和符號(hào)信息到目標(biāo)文件中

          7.-g 不從源文件中復(fù)制調(diào)試符號(hào)到目標(biāo)文件中

          arm-linux-objdump查看目標(biāo)文件(.o文件)和庫(kù)文件(.a文件)信息arm-linux-objdump -D -m arm led_elf > led.dis-D 顯示文件中所有匯編信息-m machine指定反匯編目標(biāo)文件時(shí)使用的架構(gòu),當(dāng)待反匯編文件本身沒(méi)有描述架構(gòu)信息的時(shí)候(比如S-records),這個(gè)選項(xiàng)很有用??梢杂?i選項(xiàng)列出這里能夠指定的架構(gòu).

          常用選項(xiàng):

          1.-b bfdname 指定目標(biāo)碼格式2.—disassemble或者-d 反匯編可執(zhí)行段3.—dissassemble-all或者-D 反匯編所有段4.-EB,-EL指定字節(jié)序5.—file-headers或者-f 顯示文件的整體頭部摘要信息6.—section-headers,--headers或者-h 顯示目標(biāo)文件中各個(gè)段的頭部摘要信息7.—info 或者-I 顯示支持的目標(biāo)文件格式和CPU架構(gòu)8.—section=name或者-j name顯示指定section 的信息9.—architecture=machine或者-m machine 指定反匯編目標(biāo)文件時(shí)使用的架構(gòu)

          1. 修改源代碼的頂層MakefileCC =$(CROSSCOM_PILE)gcc-->CC =$(CROSSCOM_PILE)gcc-g使成生的vmlinux中含有debug信息2. 所有生成.o的rule中再加一條CC-E-dD -C $< > /preprocessing/$(shell pwd)/$<生成預(yù)處理文件從這個(gè)文件里面能很容易找到c源文件的宏定義3. objdump -h vmlinux > vmlinux.txt顯示linux 內(nèi)核段信息,如段的開(kāi)始虛擬地址,段的長(zhǎng)度4.objdump -S -l -z vmlinux > vmlinux.txt反匯編vmlinux到vmlinux.txt,vmlinux.txt含有匯編和c源文件的混合代碼,看起來(lái)很方便。而且能一步步看linux怎么一步步運(yùn)行的。5. objdump -S -l -z -j xxxx(section name) vmlinux > vmlinux.txt反匯編linux內(nèi)核段xxxx到文件vmlinux.txt中。6. objdump -x vmlinux > x.txtvmliux中所有段的頭信息,其中包口vmlinux的入口地址等7. objdump --debugging vmlinux > debugging.txt很多有用的debug信息,如函數(shù)名,結(jié)構(gòu)體定義等我覺(jué)的用根據(jù)以上信息,ultraedit看很方便。尤其在vmlinux.txt中選中文件名,用ultraedit右鍵的open能馬上打開(kāi)文件,很方便。

          objdump -j .text -Svmlinux > vmlinux.txt-S盡可能反匯編出源代碼,尤其當(dāng)編譯的時(shí)候指定了-g這種調(diào)試參數(shù)時(shí),效果比較明顯。隱含了-d參數(shù)。

          -l用文件名和行號(hào)標(biāo)注相應(yīng)的目標(biāo)代碼,僅僅和-d、-D或者-r一起使用使用-ld和使用-d的區(qū)別不是很大,在源碼級(jí)調(diào)試的時(shí)候有用,要求編譯時(shí)使用了-g之類的調(diào)試編譯選項(xiàng)。

          [-l | --line-numbers][-S | --source]混合匯編[-z | --disassemble-zeroes][-j section | --section=section][--prefix-addresses]



          關(guān)鍵詞: armlinuxgc

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();