程序显示在类似线程这里
让我们假设我的操作系统没有实施
ASLR
或来自buffer overflow
的其他保护。
长话短说,作者正在从父进程生成子进程并将父进程创建的
buffer
传递给子进程以覆盖子进程上的return address
stack
以生成shell
.到目前为止一切顺利。
我很难理解的是
return address
是在父进程中计算的,即
ret = (unsigned int) &i - offset; // Set return address
这个
return address
是stack
的parent process
的地址,但是child process
有自己的stack
即address space
。作者如何得出结论,上面计算的 ret
将是子堆栈框架上 nop-sleds
/ shell
的大致位置,因为这两个堆栈不同且不相关(?)
为了实验,我尝试暂时关闭
ASLR
,使用gdb
单独调试这些程序,发现当我在breakpoint
函数上设置main
时,$ESP
总是指向父级0xffffd02c
-process 和 0xffffd04c
用于子进程。