C 不确定在缓冲区溢出攻击中将返回地址更改为什么

C 不确定在缓冲区溢出攻击中将返回地址更改为什么,c,assembly,stack,buffer,overflow,C,Assembly,Stack,Buffer,Overflow,我正在研究一个简单的缓冲区溢出攻击。程序接收大小为12的数组,当溢出时,该数组显然会覆盖堆栈上的元素,包括返回指针。在我将元素输入数组之前,堆栈如下所示: 0xffffcf80: 0x00000000 0x00000000 0xffffcfa8 0x00209210 0xffffcf90: 0xffffcfd8 0x00209210 0x003514e0 0x080486a4 0xffffcfa0: 0xffffcfb4 0x00350

我正在研究一个简单的缓冲区溢出攻击。程序接收大小为12的数组,当溢出时,该数组显然会覆盖堆栈上的元素,包括返回指针。在我将元素输入数组之前,堆栈如下所示:

0xffffcf80:    0x00000000    0x00000000    0xffffcfa8    0x00209210
0xffffcf90:    0xffffcfd8    0x00209210    0x003514e0    0x080486a4
0xffffcfa0:    0xffffcfb4    0x00350ff4  **0xffffcfd8**  0x08048543
我已经把我认为是回信地址的那个加粗了。当我输入一个十六进制字符串时,例如:11 11 11 22 22 22 33 33 44 44 55 55 55,然后我尝试了另一个内存位置作为条目的最后一部分,以便将返回地址指向其他地方。我总是得到一个非法的指令错误


我尝试了在gdb中使用info frames命令获得的许多不同的内存位置,但它们都返回相同的结果。我想我只是很难理解这个概念。我希望得到任何解释或帮助,即使这与我的问题没有直接关系。提前谢谢

您需要用要运行的代码的地址覆盖返回地址

此代码可以是:

二进制中的现有代码-在这种情况下,您只需查找它的地址 您在溢出的缓冲区中提供的代码,例如-在这种情况下,您使用该外壳代码的地址
请注意,在所有情况下,都可能会有更多的障碍需要跳过,例如,或,或…

尝试使用-fno stack protector编译程序以禁用堆栈损坏检查,使用-fno PIE编译程序以禁用可执行代码的位置随机化,因为您希望在固定地址处跳转。