我很难理解书中的 C 代码(The Shellcode's handbook):
#include <stdio.h>
unsigned long find_start(void)
{
__asm__("movl %esp, %eax");
}
int main()
{
printf("%x\n",find_start());
}
如果我用 gdb 运行它不止一次,我总是得到相同的结果(相同的地址):
(gdb) r
Starting program: /tmp/a.out
***bffff4a8***
[Inferior 1 (process 5384) exited with code 011]
(gdb) r
Starting program: /tmp/a.out
***bffff4a8***
[Inferior 1 (process 5387) exited with code 011]
(gdb) r
Starting program: /tmp/a.out
***bffff4a8***
[Inferior 1 (process 5388) exited with code 011]
这对我来说没问题,但是当我在没有 gdb 的情况下运行它时,结果会发生变化:
root@debian:~# /tmp/a.out
***bfb5f2b8***
root@debian:~# /tmp/a.out
***bffa6c58***
你知道为什么吗?(我在Debian 7上)
谢谢你