概述
因為奇怪的考試要求,最近經常有奇怪的問題,例如為什么(++a)+(++a)=14
發現反編譯出匯編之后,就能解釋很多奇怪的問題
Objdump
一次意外知道了linux上面的
objdump
可以方便的看out文件的匯編代碼,所以 這里記錄下來,不然每次都得查
- 默認
objdump -d program_name
不過默認出來的匯編語法是AT&T 語法,和常見的語法不同,看的難受,所以 ⬇
- 英特爾語法
objdump -M intel -d program_name
- 源代碼匯編交替顯示 需要編譯時帶
-g
參數
objdump -S
- 最常用命令 intel輸出 源代碼匯編交替顯示 解析C++符號(垃圾C++反編譯一坨翔/(ㄒoㄒ)/~~ )
objdump -M intel -S -C -d a.out
所有參數
- -d:將代碼段反匯編
- -S:將代碼段反匯編的同時,將反匯編代碼和源代碼交替顯示,編譯時需要給出-g,即需要調試信息。
- -C:將C++符號名逆向解析。
- -l:反匯編代碼中插入源代碼的文件名和行號。
- -j section:僅反匯編指定的section。可以有多個-j參數來選擇多個section。
其他的
- 也許有時候windows還有linux編譯器實現不一樣也可能
- 參考自: https://blog.csdn.net/zoomdy/article/details/50563680