我在网站上找到了一些相关的帖子,但没有一个能解释我的问题。代码在这里描述: 链接
我的问题如下:
笔者尝试将notesearch.c程序中strcpy()函数的返回地址改写为缓冲区中的一个,这样shellcode(我理解为植入内存中的机器码)就会被执行。
为此,他创建了一个看起来像这样的缓冲区: nop nop nop ... | 外壳代码.. | 退货地址
根据我在调用 strcpy() 函数后的理解,缓冲区被放入堆栈并将返回值覆盖到 notesearch.c 的 main。他这样做是为了当 strcpy() 完成运行并想要返回到 main 时,他将从缓冲区调用返回值。
我不明白的是:
在我看来,注入的返回地址总是与原始地址完全一致。这个怎么可能?
书中说注入的返回地址指向同一个缓冲区中的shellcode。为什么我们要将 shellcode 放在同一个缓冲区而不是内存的另一部分?这不会导致无限循环吗?
为什么我们不能将返回地址设置为缓冲区中 shellcode 的地址?或者是变量shellcode?
谁能详细说明返回地址是如何计算的以及我们为什么需要偏移量?