我有一个关于exploit_notesearch 程序的问题。
该程序仅用于创建我们最终使用 system() 函数调用的命令字符串,以利用包含缓冲区溢出漏洞的 notesearch 程序。commandstr 看起来像这样: ./notesearch Nop-block|shellcode|repeated ret(将在 nop 块中跳转)。
现在是实际问题:在exploit_notesearch 程序中通过以下行计算重新地址:
ret = (unsigned int) &i-offset;
那么为什么我们可以使用在exploit_notesearch程序的主堆栈帧底部的i变量的地址来计算将保存在notesearch程序本身的溢出缓冲区中的ret地址,所以在一个完全不同的 stackframe,并且必须在 nop 块中包含一个地址(在同一个缓冲区中)。