Linux 如何找到main()和#x27;s的返回地址在堆栈中?

Linux 如何找到main()和#x27;s的返回地址在堆栈中?,linux,buffer-overflow,exploit,Linux,Buffer Overflow,Exploit,我需要对一个类进行远程缓冲区溢出攻击。大部分我都懂。它包括覆盖main的返回地址,以便我可以执行自己的代码。 但我们从未讨论过如何在内存中找到返回地址的位置。。。 我一直搞错,但漏洞不起作用:( 我坐在gdb中,我有我的缓冲区地址(0xbffff3dc) 现在,我需要找出返回地址在堆栈中的位置(这样我就可以找到它和缓冲区之间的偏移量) 然后我就知道我需要添加多少空间: NOP(0x90)“底座” 我的外壳代码 更多的不 我的缓冲区地址(覆盖返回地址) “\r\n”?” ^我不确定标有“?”的

我需要对一个类进行远程缓冲区溢出攻击。大部分我都懂。它包括覆盖main的返回地址,以便我可以执行自己的代码。 但我们从未讨论过如何在内存中找到返回地址的位置。。。 我一直搞错,但漏洞不起作用:(

我坐在gdb中,我有我的缓冲区地址(0xbffff3dc)

现在,我需要找出返回地址在堆栈中的位置(这样我就可以找到它和缓冲区之间的偏移量)

然后我就知道我需要添加多少空间:

  • NOP(0x90)“底座”
  • 我的外壳代码
  • 更多的不
  • 我的缓冲区地址(覆盖返回地址)
  • “\r\n”?”
^我不确定标有“?”的东西是否完全必要。

您可能需要


只需尝试
objdump-d您的可执行文件
,它将为您提供汇编代码和地址

这对于代码的地址很有用,但对于main的返回地址存储在堆栈上的位置则不太有用。以下是我对GDB的发现:-main@0xbfff384中的第一个var-arglist@0xbfff798-argv@0xbfff834-局部变量@0xbffff798-prev frame@0xbffff7a0-EBP=0xbffff798-EIP=0xbffff79c返回指针应该位于EBP的正前方,对吗?只需运行
gdb
disas function
。可以指定要禁用的函数