%表示反汇编程序

时间:2014-04-23 19:22:49

标签: assembly disassembly

根据互联网的教程,当我反汇编一个程序时,我应该看到这样的代码:(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;在这里是什么意思?)

1 个答案:

答案 0 :(得分:2)

这些是x86程序集的两种不同语法。第一种称为“intel语法”,第二种称为“at&amp; t语法”。有关此问题的更多信息wikipedia

您的反汇编程序应该可以选择更改它生成的程序集的风格。例如,objdump支持-M intel切换。