[英]objdump of binary with debug info produces mangled output
我經常在objdump -S
的輸出中注意到混合匯編和C指令嚴重破壞了輸出。 這似乎僅對於使用調試信息構建的二進制文件才發生。 有沒有什么辦法解決這一問題?
為了說明這個問題,我寫了一個簡單的程序:
/* test.c */
#include <stdio.h>
int main()
{
static int i = 0;
while(i < 0x1000000) {
i++;
}
return 0;
}
上面的程序是使用/不使用調試信息構建的,如下所示:
$ gcc test.c -o test-release
$ gcc test.c -g -o test-debug
拆卸測試發布二進制文件可以正常工作。
$ objdump -S test-release
為main()
函數生成以下簡潔明了的代碼段。
080483b4 <main>:
80483b4: 55 push %ebp
80483b5: 89 e5 mov %esp,%ebp
80483b7: eb 0d jmp 80483c6 <main+0x12>
80483b9: a1 18 a0 04 08 mov 0x804a018,%eax
80483be: 83 c0 01 add $0x1,%eax
80483c1: a3 18 a0 04 08 mov %eax,0x804a018
80483c6: a1 18 a0 04 08 mov 0x804a018,%eax
80483cb: 3d ff ff ff 00 cmp $0xffffff,%eax
80483d0: 7e e7 jle 80483b9 <main+0x5>
80483d2: b8 00 00 00 00 mov $0x0,%eax
80483d7: 5d pop %ebp
80483d8: c3 ret
但是$ objdump -S test-debug
為相同的main()
函數生成以下錯誤代碼段。
080483b4 <main>:
#include <stdio.h>
int main()
{
80483b4: 55 push %ebp
80483b5: 89 e5 mov %esp,%ebp
static int i = 0;
while(i < 0x1000000) {
80483b7: eb 0d jmp 80483c6 <main+0x12>
i++;
80483b9: a1 18 a0 04 08 mov 0x804a018,%eax
80483be: 83 c0 01 add $0x1,%eax
80483c1: a3 18 a0 04 08 mov %eax,0x804a018
int main()
{
static int i = 0;
while(i < 0x1000000) {
80483c6: a1 18 a0 04 08 mov 0x804a018,%eax
80483cb: 3d ff ff ff 00 cmp $0xffffff,%eax
80483d0: 7e e7 jle 80483b9 <main+0x5>
i++;
}
return 0;
80483d2: b8 00 00 00 00 mov $0x0,%eax
}
80483d7: 5d pop %ebp
80483d8: c3 ret
我確實了解到,由於調試二進制文件包含其他符號信息,因此C代碼與匯編指令交錯顯示。 但是,這使得遵循代碼流程有些困難。
有什么方法可以指示objdump輸出純程序集,即使在二進制文件中遇到調試符號也不能將其交織到輸出中?
使用-d而不是-S。 objdump完全按照您的指示進行操作。 -S選項表示-d,但如果有調試信息可用,還會顯示C源代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.