根据互联网的教程,当我反汇编一个程序时,我应该看到这样的代码:(c hello world)
0x8048384 push ebp
0x8048385 mov ebp,esp
0x8048387 sub esp,0x8
0x804838a and esp,0xfffffff0
0x804838d mov eax,0x0
0x8048392 sub esp,eax
0x8048394 mov DWORD PTR [esp],0x80484c4
0x804839b call 0x80482b0 <_init+56>
0x80483a0 mov eax,0x0
0x80483a5 leave
0x80483a6 ret
但是,我看到的是:
0x0804860c <+0>: push %ebp
0x0804860d <+1>: mov %esp,%ebp
0x0804860f <+3>: and $0xfffffff0,%esp
0x08048612 <+6>: sub $0x10,%esp
0x08048615 <+9>: movl $0x8048720,0x4(%esp)
0x0804861d <+17>: movl $0x804a040,(%esp)
0x08048624 <+24>: call 0x8048500 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>
0x08048629 <+29>: mov $0x0,%eax
0x0804862e <+34>: leave
0x0804862f <+35>: ret
其中的参数(?不知道它是如何调用的,我的意思是%esp,%ebp thingies)与第一个代码中的参数完全相反。这是由于&#39;%&#39;%分数?它们甚至意味着什么? (以及&#39; $&#39;在这里是什么意思?)
答案 0 :(得分:2)
这些是x86程序集的两种不同语法。第一种称为“intel语法”,第二种称为“at&amp; t语法”。有关此问题的更多信息wikipedia。
您的反汇编程序应该可以选择更改它生成的程序集的风格。例如,objdump
支持-M intel
切换。