查找缓冲区地址以创建 shell 代码

Find buffer address to create shell code

在我的程序中,我试图修改 EIP 以指向包含 shell 代码的缓冲区基地址

示例: 0xbffff5f3 是指向
的堆栈地址 code[80] = "\x90\x90\x90\x90\x90\x31\xc0\x31\xdb\x31\xc9\"

我创建了一个指针ret并使用堆栈框架知识将其指向缓冲区的基址。

{
//Some more pointer arithmetic on ret
(*ret) = (int)code;
return ;
}

将eip修改为

eip            0xbffff5f3   0xbffff5f3

这工作得很好,我的 shell 代码执行了。但是 ret 是用缓冲区地址硬编码的。

但是,现在我希望我的 shell 代码包含预先知道的缓冲区基地址,这样一旦缓冲区溢出,EIP 就会指向它。

我怎样才能提前知道缓冲区的基地址?

[![缓冲区本身包含shell代码的地址][1]][1]

编辑:完善我的问题: 给定一个静态声明的数组代码[80],我怎样才能事先确定这个数组在堆栈上的基地址,以便我可以将这个基地址插入到我的 shell 代码中并插入适当的填充字节和 NOPS 来使EIP 指向 shell 代码 ?

我在网上看过很多例子,都演示了使用GDB在运行时计算缓冲区地址,但是如果我必须以编程方式导出shell代码地址,这是否可以实现.

没有直接的方法。您需要使用针对特定目标的技巧。 它们包括: