_start和__libc_start_main在64位Linux上的参数发生了什么变化?

时间:2012-10-18 12:42:40

标签: linux 64-bit 32-bit elf disassembly

我正在阅读http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html并尝试手动验证。

_start的反汇编如下:

080482e0 <_start>: 80482e0: 31 ed xor %ebp,%ebp
80482e2: 5e pop %esi
80482e3: 89 e1 mov %esp,%ecx 
80482e5: 83 e4 f0 and $0xfffffff0,%esp 
80482e8: 50 push %eax 
80482e9: 54 push %esp 
80482ea: 52 push %edx 
80482eb: 68 00 84 04 08 push $0x8048400 
80482f0: 68 a0 83 04 08 push $0x80483a0 
80482f5: 51 push %ecx 80482f6: 56 push %esi 
80482f7: 68 94 83 04 08 push $0x8048394 
80482fc: e8 c3 ff ff ff call 80482c4 <__libc_start_main@plt> 
8048301: f4 hlt

然而,我自己的反汇编如下:

0x00000000004003c0 <+0>:     xor    ebp,ebp
0x00000000004003c2 <+2>:     mov    r9,rdx
0x00000000004003c5 <+5>:     pop    rsi
0x00000000004003c6 <+6>:     mov    rdx,rsp
0x00000000004003c9 <+9>:     and    rsp,0xfffffffffffffff0
0x00000000004003cd <+13>:    push   rax
0x00000000004003ce <+14>:    push   rsp
0x00000000004003cf <+15>:    mov    r8,0x400650
0x00000000004003d6 <+22>:    mov    rcx,0x4005c0
0x00000000004003dd <+29>:    mov    rdi,0x40051c
0x00000000004003e4 <+36>:    call   0x4003b0 <__libc_start_main@plt>
0x00000000004003e9 <+41>:    hlt    
0x00000000004003ea <+42>:    nop
0x00000000004003eb <+43>:    nop 

所以我的问题只是在第一次反汇编中被推入堆栈的__libc_start_main的参数发生了什么?

我的文件是“ELF 64位LSB可执行文件,x86-64,版本1(SYSV),动态链接(使用共享库),而不是剥离。”即动态链接为http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html中的文件。

这是因为我的系统是64位且链接中使用的系统是32位吗? __libc_start_main的定义是否已更改?

0 个答案:

没有答案