日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

arm-linux-gcc/ld/objcopy/objdump使用总结[zz]

發布時間:2023/12/1 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arm-linux-gcc/ld/objcopy/objdump使用总结[zz] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

地址:http://hi.baidu.com/xiaoyue1800/item/a11a2c4a26da4b04c11613d9

?

?

arm-linux工具的功能如下:

arm-linux-addr2line 把程序地址轉換為文件名和行號。在命令行中給它一個地址和一個可執行文件名,它就會使用這個可執行文件的調試信息指出在給出的地址上是哪個文件以及行號。

?

arm-linux-ar 建立、修改、提取歸檔文件。歸檔文件是包含多個文件內容的一個大文件,其結構保證了可以恢復原始文件內容。

arm-linux-c++flit 連接器使用它來過濾 C++ 和 Java 符號,防止重載函數沖突。

arm-linux-gprof 顯示程序調用段的各種數據。

arm-linux-ld 是連接器,它把一些目標和歸檔文件結合在一起,重定位數據,并連接符號引用。通常,建立一個新編譯程序的最后一步就是調用ld。

arm-linux-nm 列出目標文件中的符號。

arm-linux-objcopy 把一種目標文件中的內容復制到另一種類型的目標文件中。

arm-linux-objcopy -I ?可以查看支持的格式

arm-linux-objdump 顯示一個或者更多目標文件的信息。使用選項來控制其顯示的信息,它所顯示的信息通常只有編寫編譯工具的人才感興趣。

arm-linux-ranlib 產生歸檔文件索引,并將其保存到這個歸檔文件中。在索引中列出了歸檔文件各成員所定義的可重分配目標文件。

arm-linux-readelf ?顯示elf格式可執行文件的信息。

arm-linux-size ?列出目標文件每一段的大小以及總體的大小。默認情況下,對于每個目標文件或者一個歸檔文件中的每個模塊只產生一行輸出。

arm-linux-string 打印某個文件的可打印字符串,這些字符串最少4個字符長,也可以使用選項-n設置字符串的最小長度。默認情況下,它只打印目標文件初始化和可加載段中的可 打印字符;對于其他類型的文件它打印整個文件的可打印字符。這個程序對于了解非文本文件的內容很有幫助。

arm-linux-strip 丟棄目標文件中的全部或者特定符號。


arm-linux-gcc -wall -O2 -c -o $@ $<

-o 只激活預處理,編譯,和匯編,也就是他只把程序做成obj文件?

-Wall 指定產生全部的警告信息?

-O2 編譯器對程序提供的編譯優化選項,在編譯的時候使用該選項,可以使生成的執行文件的執行效率提高?

-c 表示只要求編譯器進行編譯,而不要進行鏈接,生成以源文件的文件名命名但把其后綴由 .c 或 .cc 變成 .o 的目標文件?

-S 只激活預處理和編譯,就是指把文件編譯成為匯編代碼

?

arm-linux-ld?直接指定代碼段,數據段,BSS段的起始地址

? -Tbss ADDRESS ? ? ? ? ? ? ? Set address of .bss section

? -Tdata ADDRESS ? ? ? ? ? ? ?Set address of .data section

? -Ttext ADDRESS ? ? ? ? ? ? ?Set address of .text section

示例:

?${CROSS}ld -Ttext=0x33000000 led.o -o led.elf

?

使用連接腳本設置地址:

? ?arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

其中beep.lds 為連接腳本如下:

?

arm-linux-objcopy被用來復制一個目標文件的內容到另一個文件中,可用于不同源文件的之間的格式轉換

示例:

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 不從源文件中復制調試符號到目標文件中

?

arm-linux-objdump

查看目標文件(.o文件)和庫文件(.a文件)信息

arm-linux-objdump -D -m arm beep.elf > beep.dis

-D 顯示文件中所有匯編信息

-m machine

指定反匯編目標文件時使用的架構,當待反匯編文件本身沒有描述架構信息的時候(比如S-records),這個選項很有用。可以用-i選項列出這里能夠指定的架構.

?

[guowenxue@localhost asm_c_buzzer]$ cat beep.lds?

?

/***********************************************************************

?* ? ? ? ?File: ?beep.lds

?* ? ? Version: ?1.0.0

?* ? Copyright: ?2011 (c) Guo Wenxue <guowenxue@gmail.com>

?* Description: ?Cross tool link text, refer to u-boot.lds

?* ? ChangeLog: ?1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

?*

?***********************************************************************/

?

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

OUTPUT_ARCH(arm)

ENTRY(_start)

?

SECTIONS{

? ? . = 0x33000000;

? ? .text : {

? ? ? ? *(.text)

? ? ? ? *(.rodata)

? ? }

?

? ? .data ALIGN(4): {

? ? ? ? *(.data)

? ? }

?

? ? .bss ALIGN(4): {

? ? ? ? *(.bss)

? ? }

}

[guowenxue@localhost asm_c_buzzer]$ cat makefile?

# ***********************************************************************

# * ? ? ? ?File: ?makefile

# * ? ? Version: ?1.0.0

# * ? Copyright: ?2011 (c) Guo Wenxue <guowenxue@gmail.com>

# * Description: ?Makefile used to cross compile the ASM and C source code

# * ? ChangeLog: ?1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

# *

# ***********************************************************************

?

CROSS = /opt/buildroot-2011.02/arm920t/usr/bin/arm-linux-

CFLAGS =?

?

beep.bin: start.S beep.c

? ? ? ? arm-linux-gcc $(CFLAGS) -c -o start.o start.S

? ? ? ? arm-linux-gcc $(CFLAGS) -c -o beep.o beep.c

? ? ? ? arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

? ? ? ? arm-linux-objcopy -O binary -S beep.elf beep.bin

? ? ? ? rm -f *.elf *.o

?

install:

? ? ? ? cp beep.bin ~/winxp -f --reply=yes

?

clean:

? ? ? ? rm -f *.elf *.o

? ? ? ? rm -f beep.bin

?

轉載于:https://www.cnblogs.com/linucos/archive/2013/03/06/2945835.html

總結

以上是生活随笔為你收集整理的arm-linux-gcc/ld/objcopy/objdump使用总结[zz]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。