arm-linux-gcc/ld/objcopy/objdump參數(shù)
示例:Arm-linux-ld –Ttext 0x0000000 –g led.o –o led_elf
本文引用地址:http://m.butianyuan.cn/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被用來復(fù)制一個目標(biāo)文件的內(nèi)容到另一個文件中,可用于不同源文件的之間的格式轉(zhuǎn)換示例:Arm-linux-objcopy –o binary –S elf_file bin_file
常用的選項(xiàng):input-file , outflie輸入和輸出文件,如果沒有outfile,則輸出文件名為輸入文件名
2.-l bfdname或—input-target=bfdname用來指明源文件的格式,bfdname是BFD庫中描述的標(biāo)準(zhǔn)格式名,如果沒指明,則arm-linux-objcopy自己分析
3.-O bfdname 輸出的格式
4.-F bfdname 同時指明源文件,目的文件的格式
5.-R sectionname 從輸出文件中刪除掉所有名為sectionname的段
6.-S 不從源文件中復(fù)制重定位信息和符號信息到目標(biāo)文件中
7.-g 不從源文件中復(fù)制調(diào)試符號到目標(biāo)文件中
arm-linux-objdump查看目標(biāo)文件(.o文件)和庫文件(.a文件)信息arm-linux-objdump -D -m arm led_elf > led.dis-D 顯示文件中所有匯編信息-m machine指定反匯編目標(biāo)文件時使用的架構(gòu),當(dāng)待反匯編文件本身沒有描述架構(gòu)信息的時候(比如S-records),這個選項(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)文件中各個段的頭部摘要信息7.—info 或者-I 顯示支持的目標(biāo)文件格式和CPU架構(gòu)8.—section=name或者-j name顯示指定section 的信息9.—architecture=machine或者-m machine 指定反匯編目標(biāo)文件時使用的架構(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ù)處理文件從這個文件里面能很容易找到c源文件的宏定義3. objdump -h vmlinux > vmlinux.txt顯示linux 內(nèi)核段信息,如段的開始虛擬地址,段的長度4.objdump -S -l -z vmlinux > vmlinux.txt反匯編vmlinux到vmlinux.txt,vmlinux.txt含有匯編和c源文件的混合代碼,看起來很方便。而且能一步步看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)體定義等我覺的用根據(jù)以上信息,ultraedit看很方便。尤其在vmlinux.txt中選中文件名,用ultraedit右鍵的open能馬上打開文件,很方便。
objdump -j .text -Svmlinux > vmlinux.txt-S盡可能反匯編出源代碼,尤其當(dāng)編譯的時候指定了-g這種調(diào)試參數(shù)時,效果比較明顯。隱含了-d參數(shù)。
-l用文件名和行號標(biāo)注相應(yīng)的目標(biāo)代碼,僅僅和-d、-D或者-r一起使用使用-ld和使用-d的區(qū)別不是很大,在源碼級調(diào)試的時候有用,要求編譯時使用了-g之類的調(diào)試編譯選項(xiàng)。
[-l | --line-numbers][-S | --source]混合匯編[-z | --disassemble-zeroes][-j section | --section=section][--prefix-addresses]
評論