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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【软件开发底层知识修炼】八 Binutils辅助工具之- objdump工具 与 size,strings工具

發(fā)布時(shí)間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【软件开发底层知识修炼】八 Binutils辅助工具之- objdump工具 与 size,strings工具 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一篇文章學(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命令進(jìn)行反匯編:
    • objdump -d func.o

    結(jié)果如下:

    很明顯,我們得到了func.o的反匯編文件。但是上來(lái)看這個(gè)反匯編文件,也很是不方便,如果能夠?qū)⒃创a與匯編代碼對(duì)應(yīng)的看就好了。objdump -S正具有這個(gè)功能

  • 使用objdump -S進(jìn)行反匯編
    • objdump -S func.o

    結(jié)果如下:

    結(jié)果顯而易見(jiàn),我們可以看到源代碼與匯編語(yǔ)言的的對(duì)照。

  • 使用objdump -h查看目標(biāo)文件中的詳細(xì)段信息
    • 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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。