請(qǐng)閱讀【ARM GCC 編譯專(zhuān)欄導(dǎo)讀】
上篇文章:【ARM 嵌入式 編譯系列 10.2 – 符號(hào)表與可執(zhí)行程序分離詳細(xì)講解】
下篇文章:【ARM 嵌入式 編譯系列 11 – GCC attribute((packed))詳細(xì)介紹】
什么是 GNU elfutils?
GNU elfutils是一個(gè)開(kāi)源的工具集,用于處理ELF
(Executable and Linkable Format)格式的可執(zhí)行文件、目標(biāo)文件和共享庫(kù)。ELF是一種常見(jiàn)的二進(jìn)制文件格式,常用于Linux和其他類(lèi)Unix系統(tǒng)。
GNU elfutils 常用工具有哪些?
以下是一些 GNU elfutils工具的簡(jiǎn)要介紹和使用示例:
-
readelf
:用于查看ELF文件的詳細(xì)信息,如段表、符號(hào)表、重定位表等。例如:readelf -a binary_file
; -
objdump
:用于反匯編ELF文件,顯示二進(jìn)制代碼的匯編指令。例如:objdump -d binary_file
; -
objcopy
:用于復(fù)制、轉(zhuǎn)換和刪除ELF文件的各種部分。例如:objcopy -O binary input output
, 將ELF文件轉(zhuǎn)換為裸二進(jìn)制文件; -
nm
:用于顯示ELF文件的符號(hào)表。例如:nm binary_file
; -
strip
:用于從ELF文件中刪除符號(hào)和調(diào)試信息,以減小文件大小。例如:strip binary_file
; -
eu-unstrip
可以用 eu-unstrip 將調(diào)試信息合并回二進(jìn)制文件; -
eu-strip
可以用eu-strip將調(diào)試信息從二進(jìn)制文件中分離出來(lái), 示例:eu-strip --strip-debug --remove-comment -f myfile.debug myfile
, 使用--strip-debug
選項(xiàng)移除了 myfile 中的調(diào)試信息,并使用-f
選項(xiàng)將調(diào)試信息保存到了myfile.debug文件中。 -
eu-elflint
可以用來(lái)檢查和修復(fù)ELF文件中的符號(hào)。eu-elflint --reloc-debug-sections myfile
, 使用--reloc-debug-sections
選項(xiàng)修復(fù)了myfile中的調(diào)試符號(hào)。
這些只是GNU elfutils工具集中的一部分工具, 具體使用可以見(jiàn)前面系列文章
objcopy 常用參數(shù)有哪些?
在編譯腳本中我們經(jīng)??梢钥吹?objcopy 命令,下面簡(jiǎn)單介紹下 objcopy 常用的參數(shù):
-
--only-keep-debug
選項(xiàng)用于從目標(biāo)文件中提取調(diào)試信息。
例如:
objcopy --only-keep-debug myprog myprog.debug
在這個(gè)例子中,objcopy將myprog中的調(diào)試信息提取出來(lái),并存儲(chǔ)到myprog.debug文件中。
-
--add-gnu-debuglink
選項(xiàng)用于將提取的調(diào)試信息文件鏈接回原始的二進(jìn)制文件。
例如:
objcopy --add-gnu-debuglink=myprog.debug myprog
在這個(gè)例子中,objcopy將myprog.debug
文件鏈接回myprog
文件。這樣,即使myprog
文件沒(méi)有包含調(diào)試信息,調(diào)試器(如gdb)也可以找到調(diào)試信息。
GNU binutils和GNU elfutils區(qū)別是什么?
GNU binutils和GNU elfutils都是GNU工具集的一部分,都包含用于處理二進(jìn)制文件的工具,但它們的重點(diǎn)和功能有所不同。
-
GNU binutils:這是一組用于處理二進(jìn)制文件的程序集,包含了如ld(鏈接器)、as(匯編器)、objdump(反匯編等)、nm(列出符號(hào)表)、strip(剝離符號(hào)和調(diào)試信息)等工具。這些工具主要用于創(chuàng)建、修改和分析二進(jìn)制文件。
-
GNU elfutils:這是一個(gè)庫(kù)和工具集,重點(diǎn)放在處理ELF(Executable and Linkable Format)格式的二進(jìn)制文件和DWARF(一種調(diào)試信息格式)。其中包含了如libelf(操作ELF格式的庫(kù))、readelf(顯示ELF文件信息)、eu-strip(剝離符號(hào)和調(diào)試信息,但比binutils的strip更強(qiáng)大)等工具。elfutils主要用于更復(fù)雜、更深入的二進(jìn)制文件分析和調(diào)試任務(wù),比如處理調(diào)試信息。
總的來(lái)說(shuō),GNU binutils更關(guān)注通用的二進(jìn)制文件操作,而 GNU elfutils則更關(guān)注ELF格式和調(diào)試信息的處理。在日常開(kāi)發(fā)中,可能會(huì)同時(shí)用到這兩個(gè)工具集。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-648392.html
上篇文章:【ARM 嵌入式 編譯系列 10.2 – 符號(hào)表與可執(zhí)行程序分離詳細(xì)講解】
下篇文章:【ARM 嵌入式 編譯系列 11 – GCC attribute((packed))詳細(xì)介紹】文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-648392.html
到了這里,關(guān)于【ARM 嵌入式 編譯系列 10.3 -- GNU elfutils 工具小結(jié)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!