查看彙編和C代碼
回答
可以在文本用戶界面運行的gdb(TUI)模式:
gdb -tui <your-binary>
(gdb) b main
(gdb) r
(gdb) layout split
的layout split
命令將所述窗口成兩個部分 - 它們中的一個顯示所述源代碼,另外一個的相應的組裝。 一些其他技巧:
- 集拆卸味英特爾 - 如果你喜歡英特爾符號
- 集打印ASM-還原函數 - 在裝配圖demangles C++的名字
- 妮 - 未來指令
- si - 步指令
如果您不想使用TUI模式(例如,終端不喜歡它),你總是可以做:
x /12i $pc
這意味着打印12個從當前程序計數器地址指令 - 這也適用於上述的技巧(demangling,步進指令等)。
「x/12i $ pc」技巧適用於gdb和cgdb,而「佈局拆分」只適用於gdb。
享受:)
嘗試disassemble /m
。
參見http://sourceware.org/gdb/current/onlinedocs/gdb/Machine-Code.html#Machine-Code
格式類似於的objdump -S
,並混和源與拆卸。示例輸出摘錄:
10 int i = 0;
=> 0x0000000000400536 <+9>: movl $0x0,-0x14(%rbp)
11 while (1) {
12 i++;
0x000000000040053d <+16>: addl $0x1,-0x14(%rbp)
我並不想要其他解決方案,因爲我不想重新啓動gdb並讓它再次以相同方式設置,並且.o文件對重定位部分的引用使其很難理解。所以我認爲這只是票。想象一下,我的恐懼,那麼,當我最終意識到拆機/平方米默默省略了一些指令,像第一,三個字節指令後: '0x000000000442f038 <+24>:\t MOV%RSI,%RBX 0x000000000442f043 <+35>:\t子$ 0x38, %rsp' 這就是'GNU gdb(GDB)7.4.1-debian'。 – 2017-10-23 18:40:02
你的目的,儘量
objdump -S <your_object_file>
從人objdump的:
-S
--source
Display source code intermixed with disassembly, if possible.
Implies -d.
- 1. C++彙編代碼
- 2. 彙編代碼C
- 3. 彙編&C - 翻譯C'S代碼彙編
- 4. GCC C++和內聯彙編代碼?
- 5. 寫彙編代碼的C++
- 6. 從c反彙編代碼#
- 7. C代碼到MIPS彙編
- 8. C代碼MIPS彙編
- 9. C++代碼片段的彙編代碼
- 10. C++代碼中的彙編代碼
- 11. 彙編代碼到C代碼
- 12. 從C#代碼生成彙編代碼?
- 13. 一個包含C代碼和彙編代碼的C項目
- 14. 彙編代碼
- 15. 查看編譯器擴展代碼 - C++
- 16. 編譯C代碼到MIPS彙編
- 17. 反彙編C代替操作代碼
- 18. 協助使用C代碼和彙編代碼繪製堆棧
- 19. 生成的性能,C++代碼和彙編代碼
- 20. 如何查看優化的jitted .NET代碼的反彙編?
- 21. 在Eclipse中調試期間查看,修改彙編代碼
- 22. 查看emacs中函數的彙編代碼
- 23. 使用Xcode選項查看C文件的彙編代碼生成輸出>彙編
- 24. 解碼和理解彙編代碼
- 25. 解碼和理解彙編代碼
- 26. iOS彙編代碼
- 27. 彙編代碼MOVS
- 28. x86彙編代碼
- 29. ARM彙編代碼
- 30. GMP-彙編代碼?編譯代碼
有什麼辦法也擺脫頂部拆分窗口的?這是無意義的,需要空間。 – 2014-02-01 17:05:46
@BabkenVardanyan嘗試'下一個佈局'。如果它沒有給你所需的佈局,請嘗試多次這個命令。這個命令不斷在佈局之間切換,所以你可以保留你想要的。 – 2015-05-16 14:45:52