objdump命令詳解

objdump命令是用查看目標文件或者可執行的目標文件的構成的gcc工具。

選項

--archive-headers 
-a 
顯示檔案庫的成員信息,類似ls -l將lib*.a的信息列出。 -b bfdname 
--target=bfdname 
指定目標碼格式。這不是必須的,objdump能自動識別許多格式,比如: objdump -b oasys -m vax -h fu.o 
顯示fu.o的頭部摘要信息,明確指出該文件是Vax系統下用Oasys編譯器生成的目標文件。objdump -i將給出這里可以指定的目標碼格式列表。 -C 
--demangle 
將底層的符號名解碼成用戶級名字,除了去掉所開頭的下劃線之外,還使得C++函數名以可理解的方式顯示出來。 --debugging 
-g 
顯示調試信息。企圖解析保存在文件中的調試信息并以C語言的語法顯示出來。僅僅支持某些類型的調試信息。有些其他的格式被readelf -w支持。 -e 
--debugging-tags 
類似-g選項,但是生成的信息是和ctags工具相兼容的格式。 --disassemble 
-d 
從objfile中反匯編那些特定指令機器碼的section。-D 
--disassemble-all 
與 -d 類似,但反匯編所有section.-EB 
-EL 
--endian={big|little} 
指定目標文件的小端。這個項將影響反匯編出來的指令。在反匯編的文件沒描述小端信息的時候用。例如S-records. -f 
--file-headers 
顯示objfile中每個文件的整體頭部摘要信息。-h 
--section-headers 
--headers 
顯示目標文件各個section的頭部摘要信息。  -H 
--help 
簡短的幫助信息。 -i 
--info 
顯示對于 -b 或者 -m 選項可用的架構和目標格式列表。 -j name
--section=name 
僅僅顯示指定名稱為name的section的信息 -l
--line-numbers 
用文件名和行號標注相應的目標代碼,僅僅和-d、-D或者-r一起使用使用-ld和使用-d的區別不是很大,在源碼級調試的時候有用,要求編譯時使用了-g之類的調試編譯選項。 -m machine 
--architecture=machine 
指定反匯編目標文件時使用的架構,當待反匯編文件本身沒描述架構信息的時候(比如S-records),這個選項很有用。可以用-i選項列出這里能夠指定的架構. --reloc 
-r 
顯示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反匯編后的格式顯示出來。 --dynamic-reloc 
-R 
顯示文件的動態重定位入口,僅僅對于動態目標文件意義,比如某些共享庫。 -s 
--full-contents 
顯示指定section的完整內容。默認所有的非空section都會被顯示。-S 
--source 
盡可能反匯編出源代碼,尤其當編譯的時候指定了-g這種調試參數時,效果比較明顯。隱含了-d參數。 --show-raw-insn 
反匯編的時候,顯示每條匯編指令對應的機器碼,如不指定--prefix-addresses,這將是缺省選項。 --no-show-raw-insn 
反匯編時,不顯示匯編指令的機器碼,如不指定--prefix-addresses,這將是缺省選項。 --start-address=address 
從指定地址開始顯示數據,該選項影響-d、-r和-s選項的輸出。 --stop-address=address 
顯示數據直到指定地址為止,該項影響-d、-r和-s選項的輸出。 -t 
--syms 
顯示文件的符號表入口。類似于nm -s提供的信息 -T 
--dynamic-syms 
顯示文件的動態符號表入口,僅僅對動態目標文件意義,比如某些共享庫。它顯示的信息類似于 nm -D|--dynamic 顯示的信息。 -V 
--version 
版本信息 --all-headers 
-x 
顯示所可用的頭信息,包括符號表、重定位入口。-x 等價于-a -f -h -r -t 同時指定。 -z 
--disassemble-zeroes 
一般反匯編輸出將省略大塊的零,該選項使得這些零塊也被反匯編。@file 可以將選項集中到一個文件中,然后使用這個@file選項載入。

實例

首先,在給出后面大部分測試所基于的源代碼以及編譯指令。 源代碼如下:
mytest.cpp

#include<stdio.h>
void exploit()
{system("/bin/sh");
}
void func()
{char str[0x20];read(0, str, 0x50);
}
int main()
{func();return 0;
}

編譯:

gcc -c -g -o mytest mytest.c

在這里插入圖片描述
查看當前使用的objdump的版本號:

objdump -V 

在這里插入圖片描述
顯示可用的架構和目標結構列表:

objdump -i

在這里插入圖片描述
顯示mytest文件中的text段的內容:

objdump --section=.text -s mytest

在這里插入圖片描述
這里注意,不能單獨使用-j或者–section,例如objdump --section=.text mytest是不會運行成功的。

反匯編mytest中的text段內容,并盡可能用源代碼形式表示:

objdump -j .text -S mytest

在這里插入圖片描述
這里注意,不能單獨使用-j或者–section,例如objdump -j .text mytest是不會運行成功的。另外-S命令對于包含調試信息的目標文件,顯示的效果比較好,如果編譯時沒有指定-g選項,那么目標文件就不包含調試信息,那么顯示效果就差多了。

反匯編出mytest.o的源代碼:

objdump -S mytest

在這里插入圖片描述
這里,尤其當編譯的時候指定了-g這種調試參數時,反匯編的效果比較明顯。隱含了-d參數。

顯示文件的符號表入口:

objdump -t mytest

在這里插入圖片描述
顯示文件的符號表入口,將底層符號解碼并表示成用戶級別:

**objdump -t -C mytest**

在這里插入圖片描述

反匯編目標文件的特定機器碼段:

objdump -d mytest

在這里插入圖片描述
這里,對text段的內容進行了反匯編。

反匯編特定段,并將匯編代碼對應的文件名稱和行號對應上:

objdump -d -l mytest

在這里插入圖片描述
這里,項"-d"從objfile中反匯編那些特定指令機器碼的section,而使用"-l"指定用文件名和行號標注相應的目標代碼,僅僅和-d、-D或者-r一起使用,使用-ld和使用-d的區別不是很大,在源碼級調試的時候有用,要求編譯時使用了-g之類的調試編譯選項。

顯示目標文件各個段的頭部摘要信息:

objdump -h mytest

在這里插入圖片描述
這里,更多的內容參見man objdump中的這個選項。

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

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

相關文章

Java——異常(try...catch...finally)

public class Demo5_Throwable {public static void main(String[] args) {try{System.out.println(1/0);}catch(Exception e){System.out.println(e.getMessage());//獲取異常信息,返回字符串&#xff1b;System.out.println(e.toString());//獲取異常類名和異常信息&#xff…

Python程序反轉給定數字(2種不同方式)

Take input number from the user and print its reverse. 從用戶處獲取輸入號碼并打印其反面。 Example: 例&#xff1a; Input:12345Output:54321Here, we are implementing program to reversing a given number using 2 different ways. 在這里&#xff0c;我們正在實施程…

外匯期貨學習專帖(轉)

一篇好文,值得深思! (轉) 我的一些所看所想,和大家聊聊 ; d: R ^6 c* A2 e X" y8 y4 Bhttp://www.fx998.cn 說來慚愧,很久以前,俺在期貨公司混事,95年以前國內期貨公司從外盤棉花到咖啡....,外匯期指到原油.都能*作.是一派欣欣向榮之景.95年之后,按國家規定都轉了內…

《Pro ASP.NET MVC 3 Framework》學習筆記之四【領域模型介紹】

主題&#xff1a;應用領域驅動開發(Applying Domain-Driven Development) Domain Model是MVC程序的"心臟"&#xff0c;其他的一切&#xff0c;包括Controllers和Views僅僅是用來跟Domain Model交互的一種方式&#xff0c;ASP.NET MVC并沒有限制使用在Domain Model上面…

Java——集合框架(List)

集合框架&#xff08;List的三個子類的特點&#xff09; A&#xff1a;List的三個子類的特點 ArrayList&#xff1a; 底層數據結構是數組&#xff0c;查詢快&#xff0c;增刪慢。 線程不安全&#xff0c;效率高。 Vector&#xff1a; 底層數據結構是數組&#xff0c;查詢…

一步一步學pwntools(適合新手)

序 pwntools是一個二進制利用框架。官方文檔提供了詳細的api規范。然而目前并沒有一個很好的新手教程。因此我用了我過去的幾篇writeup。由于本文只是用來介紹pwntools使用方法&#xff0c;我不會過于詳細的講解各種二進制漏洞攻擊技術。 Pwntools的“Hello World” 棧溢出無…

關于J2EE中死鎖問題的研究(1)

大多數重要的應用程序都涉及高度并發性和多個抽象層。并發性與資源爭用有關&#xff0c;并且是導致死鎖問題增多的因素之一。多個抽象層使隔離并修復死鎖環境的工作變得更加困難。 通常&#xff0c;當同時執行兩個或兩個以上的線程時&#xff0c;如果每個線程都占有一個資源并請…

python變量分配內存_Python | 聲明任何變量而不分配任何值

python變量分配內存Since, Python is a dynamic programming language so there is no need to declare such type of variable, it automatically declares when first time value assign in it. 由于Python是一種動態編程語言&#xff0c;因此無需聲明此類變量&#xff0c;它…

UVA 10004 - Bicoloring

模擬染色&#xff0c;因為只有兩種顏色&#xff0c;所以分別用 0、 1 代表這兩種顏色&#xff0c;然后從0開始深搜&#xff0c;如果 每個點都能染上色&#xff0c;且相鄰兩點的顏色不同&#xff0c;則符合要求。 #include<stdio.h>#include<string.h>#define MAXN …

標志寄存器:CF、PF、AF、ZF、SF、TF、DF、OF

注&#xff1a;下面說到的標志寄存器都是縮寫&#xff0c;C就是CF&#xff0c;其他也一樣 標志寄存器&#xff1a;C、P、A、Z、S、T、D、O的內容只會是0或1&#xff0c;0表示假&#xff0c;1表示真 O&#xff1a;溢出標志 一個寄存器如果存放的值超過所能表示的范圍&#xf…

揭秘:銷售人員26個致命弱點

銷售人員有許多積極的態度需要學習&#xff0c; 同時也有許多不良的習慣應該避免&#xff0c;以免影響個性及專業能力。仔細看看這些缺點&#xff0c;反省你自己&#xff0c;還需要改善的畫&#xff0c;直到你給自己一百分為止。找一位深知你的好 友&#xff0c;讓他誠實地給你…

Java——集合(練習題)

例題1&#xff1a;產生10個1~20之間的隨機數&#xff0c;要求隨機數不能重復 import java.util.HashSet; import java.util.Random; public class Test1 {/*** 產生10個1~20之間的隨機數&#xff0c;要求隨機數不能重復* * 分析&#xff1a;* 1,有Random類創建隨機數對象* 2&a…

模塊化 組件化 工程化_軟件工程中的模塊和軟件組件

模塊化 組件化 工程化The module in software is a small part of the software that is responsible for performing any kind of functionality. Sometimes, the term sub-program is also used to refer to the term module. 軟件中的模塊是軟件的一小部分&#xff0c;負責…

Firefox2狂占CPU解決辦法

https://images.cnblogs.com/cnblogs_com/Tisty/138006/o_firefox3.jpg 看了一下&#xff0c;不知道 "jpeg_free_large" 是干啥的&#xff0c;遂用 "Firefox jpeg_free_large" Google 一下&#xff0c;出來的一堆東西里有帖子說可能和 Apple 的 QuickTime …

PUSHAD和POPAD,以及PUSHA和POPA

PUSHAD PUSHAD也叫保護現場&#xff0c;就是把我們的寄存器壓入棧中 pushad是把eax&#xff0c;ecx&#xff0c;edx&#xff0c;ebx&#xff0c;esp、ebp&#xff0c;esi&#xff0c;edi依次壓入棧中&#xff0c;ESP會減少32&#xff0c;相當于&#xff1a; push eax push ec…

Java——n個數的全排列

例題&#xff1a; 輸入一串字符串&#xff0c;將該字符串中的字符元素進行全排列&#xff0c;然后&#xff0c;一串輸出結果。 例如&#xff1a; 輸入&#xff1a; ABCD 輸出&#xff1a; ABCD ABDC ACBD ACDB ADBC ADCB BACD BADC BCAD BCDA BDAC BDCA CABD CADB CBAD CBDA…

一段個性化stringgrid的代碼

需要注意的是 該段程序使用了 canvas。 procedure TW_CkbTaiZhang.KhLstDrawCell(Sender: TObject; ACol,ARow: Integer; Rect: TRect; State: TGridDrawState);begin if ARowkhlst.Row then with khlst.Canvas do //畫 cell 的邊框 begin Pen.Color : $00ff0000; …

dp 扔雞蛋_使用動態編程(DP)的雞蛋掉落問題

dp 扔雞蛋Problem statement: You are given N floor and K eggs. You have to minimize the number of times you have to drop the eggs to find the critical floor where critical floor means the floor beyond which eggs start to break. Assumptions of the problem: 問…

MOVSX和MOVZX

MOVSX 先符號擴展,再傳送 格式&#xff1a; MOVSX 操作數A &#xff0c;操作數B //操作數B的空間小于A比如說我們使用命令&#xff1a; movsx eax&#xff0c;bxbx是16位&#xff0c;eax是32位&#xff0c;傳值過程&#xff1a; 先用bx的符號位把eax高16填滿&#xff0c;b…

統計學習以及支持向量機的國內外基本比較重要的書

1、支持向量機導論&#xff0c;此書乃是SVM方面的經典著作&#xff0c; 該書的作者也是近年來SVM、kernel methods學術圈內的活躍學者&#xff0c;對于這些領域均有過重要的貢獻。這本書從“線性機器、核方法、統計學習理論、凸優化”四個方面揭示了SVM的內在機理 --利用核…