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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

objdump与readelf

發布時間:2023/11/27 生活经验 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 objdump与readelf 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

objdump和readelf都可以用來查看二進制文件的一些內部信息. 區別在于objdump
借助BFD而更加通用一些, 可以應付不同文件格式, readelf則并不借助BFD,
而是直接讀取ELF格式文件的信息, 按readelf手冊頁上所說, 得到的信息也略細致一些.
幾個功能對比.

1. 反匯編代碼
查看源代碼被翻譯成的匯編代碼, 大概有3種方法,
1) 通過編譯器直接從源文件生成, 如gcc -S 文件
2) 對目標代碼反匯編, 一種是靜態反匯編, 就是使用objdump? -d 文件
3) 另外一種就是對運行時的代碼反匯編, 一般通過gdb

readelf并不提供反匯編功能.

objdump可以指定反匯編哪個節, 一般只有對包含指令的節反匯編才有意義. 而對于一些
其他的類型的節, objdump也可以將特殊節的數據以解析后的形式呈現出來

?

2. 顯示relocation節的條目
-r參數顯示elf文件的類型為REL的節的信息, 使用-S參數可以列出elf文件的
所有節的信息, 其中也就包括了REL節.

對于可重定位文件兩者顯示條目一致, 最重要的offset和type以及Sym.Name都有.

#readelf -r XXX.o

#objdump -r XXX.o

readelf的顯示分節, 而objdump則將兩個節合在一起. readelf的
顯示更加清晰一些.

3. 顯示動態重定位條目(或者可以認為是動態鏈接相關的重定位條目)
(按objdump的man page說明, 只對dynamic object有效, 如某些類型的共享庫)
readelf和objdump等價的命令為readelf -D -r file和objdump -R file.

對readelf使用-r和-D -r的區別, 對于共享庫在于數據的呈現方式略有不同. 這兩種
都將數據解析后呈現出來. 前者顯示的是相對于基地址的偏移, 后者則顯示絕對偏移量.
前者顯示條目數, 后者顯示字節數.

另外有必要說明的是如果對可重定位文件(.o文件)應用這兩個命令是無效的.

?

4. 顯示節信息: readelf -S和objdump -h
對于可重定位文件, objdump -h不能顯示.rel開頭的節和.shstrtab, .symtab, .strtab.
而readelf的顯示有一個.group節, 其內容為節的group, 可以用-g參數查看.

對于共享庫, objdump -h仍然不能顯示.shstrtab, .symtab, .strtab三個節, 另外還有
一個區別在于readelf從一個NULL類型的節開始, 而objdump的輸出去掉了這個空的節.

?

5. 顯示.dynamic節信息
只readelf -d有對應的功能, objdump沒有. 另外需要注意, 看重定位文件不需要動態
鏈接(加載), 所以沒有.dynamic節.

?

6. 顯示程序段信息
第二個readelf支持而objdump沒有的功能. 命令參數為readelf -l.
同樣, 對于可重定位文件而言沒有段. 這一點也可以從ELF頭中看到, 命令為readelf -h.

7. 以字節(HEX或字符)形式dump某節的內容
readelf -x <secname>
objdump -s
后者默認一次dump所有節的內容. 如果只想dump某節的內容, 則用-j <secname>
參數指定. readelf一次只能dump某一節的內容.

?

8. 查看ELF程序頭信息
readelf -h提供完整的信息, objdump -f只提供很少的信息.

9. 查看符號信息
readelf -s
objdump -t
兩個命令都提供類似nm的信息.

注意readelf同時顯示了.dynsym的信息, 而objdump實際上只顯示了.symtab部分的信息.
如果需要顯示動態部分的符號, 使用-T參數.

?

對readelf同時使用-D -s參數無效. 對照手冊頁說明也沒弄清楚-D的主要用途,
在這里可能因為-s已經能夠都顯示了.

10. 一次全部
兩個命令都提供了一個參數, 指定多個其他參數的集合一起顯示, 但顯示內容略有不同.
readelf -a: -h -l -S -r -s -d -n -V
objdump -x: -a -f -h -p -r -t

?

擴展閱讀:

readelf和ldd分析elf文件

objdump查看目標文件構成

?參考:

http://www.newsmth.net/pc/pccon.php?id=10001977&nid=316530

總結

以上是生活随笔為你收集整理的objdump与readelf的全部內容,希望文章能夠幫你解決所遇到的問題。

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