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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378796.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378796.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖像分割-LOG檢測器和DOG檢測器

邊緣檢測是以較小的算子為基礎的&#xff0c;具有兩個建議 1、灰度變化與圖像尺寸無關&#xff0c;因此檢測要求使用不同尺寸的算子。 2、灰度的突然變化會在一階導數產生波峰波谷&#xff0c;在二階導數產生零交叉 大的算子檢測模糊邊緣&#xff0c;小的算子檢測銳度集中的細節…

java const string_深入研究Java String

開始寫 Java 一年來&#xff0c;一直都是遇到什么問題再去解決&#xff0c;還沒有主動的深入的去學習過 Java 語言的特性和深入閱讀 JDK 的源碼。既然決定今后靠 Java吃飯&#xff0c;還是得花些心思在上面&#xff0c;放棄一些打游戲的時間&#xff0c;系統深入的去學習。Java…

python 示例_帶有示例的Python字典update()方法

python 示例字典update()方法 (Dictionary update() Method) update() method is used to update the dictionary by inserting new items to the dictionary. update()方法用于通過將新項目插入字典來更新字典。 Syntax: 句法&#xff1a; dictionary_name.setdefault(itera…

Rsync 使用指南

Rsync是個相當棒的同步工具&#xff0c;比如&#xff1a;1. 如何做本地兩個目錄之間的同步&#xff1f;rsync -av --delete --force ~/Desktop/Miscs/ /media/disk/DesktopMiscs 這樣就可以做~/Desktop/Miscs目錄的鏡像了。/media/disk是我的移動硬盤的掛載點。這里關鍵有個問題…

C++——統計多行單個字符類型個數

鍵盤輸入n個字符&#xff0c;請分別統計大寫字母、小寫字母、數字、其他字符的個數并輸出&#xff1b;還需要輸出所有數字字符之和 【輸入形式】 第一行為一個整數n(100 > n > 0)&#xff0c;接下來n行每行一個字符 【輸出形式】 輸出第1行為4個整數&#xff0c;分別…

安卓項目4

經歷兩天的琢磨&#xff0c;終于把android連接服務器端php&#xff0c;讀取mysql這一塊弄好了。 先說說這幾天遇到的問題。 http://wenku.baidu.com/view/87ca3bfa700abb68a982fbca.html 這是我參照的資料&#xff0c;原先我一度認為是不能實例化ServiceLink類&#xff0c;后來…

system getenv_Java System類getenv()方法及示例

system getenv系統類getenv()方法 (System class getenv() method) getenv() method is available in java.lang package. getenv()方法在java.lang包中可用。 getenv() method is used to return an unmodifiable Map of the current environment variable in key-value pairs…

用ASP獲取客戶端IP地址的方法

要想透過代理服務器取得客戶端的真實IP地址&#xff0c;就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 來讀取。不過要注意的事&#xff0c;并不是每個代理服務器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 來讀取客戶端的真實…

C++——已知a+b、 a+c、b+c、 a+b+c,求a、b、 c

有三個非負整數a、b、 C,現按隨機順序給出它們的兩兩和以及總和4個整數&#xff0c;即ab、 ac、bc、 abc, 注意,給出的4個數的順序是隨機的&#xff0c;請根據這四個數求出a、b、c是多少? [輸入形式] 輸入為一-行4個正整數, x1、 x2、x3、 x4 (0≤xi≤10^9) &#xff0c;表示…

DDD:DomainEvent、ApplicationEvent、Command

Command&#xff1a;縱向傳遞&#xff0c;跨分層&#xff0c;在控制器層和應用層之間傳遞。 DomainEvent&#xff1a;橫向傳遞&#xff0c;跨聚合&#xff0c;在一個DLL中。 ApplicationEvent&#xff1a;橫向傳遞&#xff0c;跨模塊&#xff0c;在不同的DLL中。轉載于:https:/…

表示和描述-邊界追蹤

邊界追蹤目標&#xff1a; 輸入&#xff1a;某一區域的點 輸出&#xff1a;這一區域的點的坐標序列&#xff08;順時針或逆時針&#xff09; Moore邊界追蹤法&#xff1a; 兩個前提條件&#xff1a; 1、圖像為二值化后的圖像&#xff08;目標為1&#xff0c;背景為0&#xff0…

視頻的讀取與處理

讀取本地視頻&#xff0c;以灰度視頻輸出 import cv2vc cv2.VideoCapture(E:\Jupyter_workspace\study\data/a.mp4)#視頻路徑根據實際情況而定#檢查是否打開正確 if vc.isOpened():open,fream vc.read()#read()返回兩個參數&#xff0c;第一個參數為打開成功與否True or Fal…

更靈活的定位內存地址的方法05 - 零基礎入門學習匯編語言36

第七章&#xff1a;更靈活的定位內存地址的方法05 讓編程改變世界 Change the world by program 問題7.8 [codesyntax lang"asm"] assume cs:codesg,ds:datasg datasg segment db ibm db dec db dos db vax …

nextgaussian_Java Random nextGaussian()方法與示例

nextgaussian隨機類nextGaussian()方法 (Random Class nextGaussian() method) nextGaussian() method is available in java.util package. nextGaussian()方法在java.util包中可用。 nextGaussian() method is used to generate the next pseudo-random Gaussian double valu…

Java PriorityQueue clear()方法與示例

PriorityQueue類clear()方法 (PriorityQueue Class clear() method) clear() method is available in java.util package. clear()方法在java.util包中可用。 clear() method is used to remove all the objects from this PriorityQueue. clear()方法用于從此PriorityQueue中刪…

圖像分割-邊緣連接

三種基本方法&#xff1a; 1&#xff1a;局部處理 2&#xff1a;區域處理 3&#xff1a;使用霍夫變換的全局處理 局部處理 根據預定的規則&#xff0c;將所有相似點連接起來。 用于確定邊緣像素相似性的兩個主要性質&#xff1a;1、梯度向量的幅度2、梯度向量的角度 由于要…

01-圖像ROI區域獲取

截取部分圖像數據 import cv2 def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()img2 cv2.imread("E:\Jupyter_workspace\study\data/cat.png")#讀取照片&#xff0c;第二個參數若為0&#xff0c;則灰度圖&#xff1b;若不填或者1…

如何編寫測試計劃

有以下幾個方面需要作考慮&#xff1a; 1. 測試的范圍。要測試什么&#xff0c;這是肯定要明確的&#xff0c;即使你知道&#xff0c;你也要寫出來&#xff0c;讓看這份文檔的人知道測試的范圍。在確定測試內容的時候&#xff0c;還可以做一個優先級的區分&#xff0c;這樣能保…

java clone 序列化_關于Java對象深度Clone以及序列化與反序列化的使用

? 我們可以利用clone方法來實現對象只見的復制&#xff0c;但對于比較復雜的對象(比如對象中包含其他對象&#xff0c;其他對象又包含別的對象.....)這樣我們必須進行層層深度clone&#xff0c;每個對象需要實現 cloneable接口&#xff0c;比較麻煩&#xff0c;那就繼續…