在 linux x86 中获取函数的内存地址

Getting the memory address of a function in linux x86

我已经看到很多将 functions/code 的内存地址写入 EIP 的漏洞,想知道是否有一种方法(可能是 gdb 或其他东西)可以用来确定内存我在缓冲区溢出测试中使用的一些 shellcode 的地址,并使用 python 结构库将其打包到 return 指针中。

现在,我正在使用 gdb 检查堆栈并在我的代码中使用 NOPS 来找出函数的地址,但这实际上只是一个猜谜游戏。有人知道我能做什么吗?

在 GDB 中,您可以使用以下命令检查函数并从其符号名称中获取其地址:x myFun

然而,在你的 exploit 中硬编码一个函数地址基本上是在赌二进制地址 space 永远不会改变的可能性,ASLR 是一种保护,当你试图硬编码内存地址时会妨碍你因为它将在运行时随机化某些内存段。

当我尝试使用 ret2shellcode 来利用二进制文件时,我通常尝试用我自己的输入填充缓冲区并在该输入处设置断点,然后我尝试确定它在堆栈中的位置和大小,是否它是否适合我的 shellcode 取决于你的缓冲区大小。有时你可以将 shellcode 放在 EIP 之前,有时你可以将它放在 EIP 之后。这完全取决于您的二进制文件,并且假设有一个基本的 ret2shellcode 漏洞。