新聞中心

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

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

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

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

本文引用地址:http://butianyuan.cn/article/201611/319394.htm

使用連接腳本設置地址: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被用來復制一個目標文件的內(nèi)容到另一個文件中,可用于不同源文件的之間的格式轉(zhuǎn)換示例:Arm-linux-objcopy –o binary –S elf_file bin_file

常用的選項:input-file , outflie輸入和輸出文件,如果沒有outfile,則輸出文件名為輸入文件名

2.-l bfdname或—input-target=bfdname用來指明源文件的格式,bfdname是BFD庫中描述的標準格式名,如果沒指明,則arm-linux-objcopy自己分析

3.-O bfdname 輸出的格式

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

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

6.-S 不從源文件中復制重定位信息和符號信息到目標文件中

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

arm-linux-objdump查看目標文件(.o文件)和庫文件(.a文件)信息arm-linux-objdump -D -m arm led_elf > led.dis-D 顯示文件中所有匯編信息-m machine指定反匯編目標文件時使用的架構(gòu),當待反匯編文件本身沒有描述架構(gòu)信息的時候(比如S-records),這個選項很有用。可以用-i選項列出這里能夠指定的架構(gòu).

常用選項:

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

1. 修改源代碼的頂層MakefileCC =$(CROSSCOM_PILE)gcc-->CC =$(CROSSCOM_PILE)gcc-g使成生的vmlinux中含有debug信息2. 所有生成.o的rule中再加一條CC-E-dD -C $< > /preprocessing/$(shell pwd)/$<生成預處理文件從這個文件里面能很容易找到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怎么一步步運行的。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盡可能反匯編出源代碼,尤其當編譯的時候指定了-g這種調(diào)試參數(shù)時,效果比較明顯。隱含了-d參數(shù)。

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

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



關鍵詞: armlinuxgc

評論


技術專區(qū)

關閉