【软件开发底层知识修炼】八 Binutils辅助工具之- objdump工具 与 size,strings工具
上一篇文章學(xué)習(xí)了ar工具與nm工具,點(diǎn)擊鏈接查看上一篇文章:點(diǎn)擊鏈接
本片文章學(xué)習(xí)記錄以下三個(gè)工具:
- objdump
- size
- strings
1、objdump工具
用法:
-
反匯編目標(biāo)文件,查看匯編到源碼的映射(后面代碼案例分析看具體區(qū)別)
- objdump -d func.o
- objdump -S func.o
-
查看目標(biāo)文件中的詳細(xì)段信息
- objdump -h test.o
其中objdump -h的輸出需要說(shuō)明一下(后面有例子說(shuō)明):
1.1、代碼案例
還是以上一篇文章的代碼來(lái)說(shuō)明(運(yùn)行時(shí)出錯(cuò),但是不影響我們本次的實(shí)驗(yàn))
test.c
#include <stdio.h>int g_global = 0; int g_test = 1;extern int* g_pointer; extern void func();int main(int argc, char *argv[]) {printf("&g_global = %p\n", &g_global);printf("&g_test = %p\n", &g_test);printf("&g_pointer = %p\n", &g_pointer);printf("g_pointer = %p\n", g_pointer);printf("&func = %p\n", &func);printf("&main = %p\n", &main);func();return 0; }func.c
#include <stdio.h>int* g_pointer;void func() {*g_pointer = (int)"D.T.Software";return; }對(duì)上述代碼進(jìn)行編譯:
- gcc -g -c func.c -o func.o
- gcc -g -c test.c -o test.o
- gcc func.c test.c -o lyy
- objdump -d func.o
結(jié)果如下:
很明顯,我們得到了func.o的反匯編文件。但是上來(lái)看這個(gè)反匯編文件,也很是不方便,如果能夠?qū)⒃创a與匯編代碼對(duì)應(yīng)的看就好了。objdump -S正具有這個(gè)功能
- objdump -S func.o
結(jié)果如下:
結(jié)果顯而易見(jiàn),我們可以看到源代碼與匯編語(yǔ)言的的對(duì)照。
- objdump -h test.o
結(jié)果如下:
上述對(duì)應(yīng)的每一列的內(nèi)容,在上面的表格中已經(jīng)有所說(shuō)明。需要注意的地方是VMA與LMA這兩列內(nèi)容一般情況下是相等的。并且在上面的例子中我們看到它們對(duì)應(yīng)的列都是0,其實(shí)是因?yàn)閠est.o目標(biāo)文件是沒(méi)有鏈接的文件,它的加載地址都還是不確定的,所以在這里就直接是0.
VMM是虛擬內(nèi)存地址,實(shí)際上就是進(jìn)程的地址空間中的地址,此時(shí),程序的一個(gè)副本進(jìn)程,已經(jīng)運(yùn)行起來(lái)了,它的加載地址(LMA)就是加載到虛擬地址空間中的地址。所以LMA與VMA相等。
比如我們對(duì)可執(zhí)行文件lyy進(jìn)行查詢:
- objdump -h lyy
顯示如下(不全):
很明顯,此時(shí)的lyy是可執(zhí)行文件,是已經(jīng)鏈接好的文件,所以它的VMA與LMA都有具體的值。并且相等。
2、size工具
- size工具可以獲取目標(biāo)文件中所有段的大小
如:
- size test.o
3、strings工具
- 獲取目標(biāo)文件中的所有字符串常量
如:
- strings test.o
很明顯,雙引號(hào)下的字符串,都是字符串常量。
4、總結(jié)
- 學(xué)會(huì)使用objdump工具(-d -S -h這三個(gè)選項(xiàng)的含義)
- 學(xué)會(huì)使用size工具查看目標(biāo)文件各個(gè)段的大小
- 學(xué)會(huì)使用strings工具查看目標(biāo)文件的所有字符串常量
本文參考狄泰軟件學(xué)院相關(guān)課程
想學(xué)習(xí)的可以加狄泰軟件學(xué)院群,
群聊號(hào)碼:199546072
學(xué)習(xí)探討加個(gè)人(可以免費(fèi)幫忙下載CSDN資源):
qq:1126137994
微信:liu1126137994
總結(jié)
以上是生活随笔為你收集整理的【软件开发底层知识修炼】八 Binutils辅助工具之- objdump工具 与 size,strings工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 仿斗鱼、美团、网易邮箱等 弹窗效果
- 下一篇: matlab中求三维中的多个体积,用ma