#include
int main(int argc, char** argv)
{
printf("hello worldnprintf:%x", printf);
return 0;
}
反汇编后,大致如下:
08048320 :
8048320:ff 25 08 a0 04 08 jmp *0x804a008
8048326:68 10 00 00 00 push $0x10
804832b:e9 c0 ff ff ff jmp 80482f0
int main(int argc, char** argv)
{
80483e4:55 push %ebp
80483e5:89 e5 mov %esp,%ebp
80483e7:83 e4 f0 and $0xfffffff0,%esp
80483ea:83 ec 10 sub $0x10,%esp
printf("hello worldnprintf:%x", printf);
80483ed:b8 d0 84 04 08 mov $0x80484d0,%eax
80483f2:c7 44 24 04 20 83 04 movl $0x8048320,0x4(%esp)
80483f9:08
80483fa:89 04 24 mov %eax,(%esp)
80483fd:e8 1e ff ff ff call 8048320
return 0;
8048402:b8 00 00 00 00 mov $0x0,%eax
8048407:c9 leave
8048408:c3 ret
8048409:90 nop
...
这里我不太理解的是:
08048320 :
8048320:ff 25 08 a0 04 08 jmp *0x804a008
8048326:68 10 00 00 00 push $0x10
804832b:e9 c0 ff ff ff jmp 80482f0
谁能详细解释下吗。
另外程序被加载时,load程序如何链接libc库中的printf函数呢,通过上面的汇编能反映出来不?