#include <stdio.h>
#include <stdlib.h>
void badf(int n, char c, char* buffer)
{
int i;
for (i=0; i<n; i++)
{
buffer[i]=c;
}
}
void f(int n, char c)
{
char buffer[16];
badf(n,c,buffer);
}
void message ()
{
printf("Hello\n");
}
int main()
{
f(32,0x08048411);
return 0;
}
这是我到目前为止得到的代码(得到了它的基础并坚持下去,这就是为什么有一个 badf 和 f 函数)
目标是程序通过溢出到指令指针来打印 Hello 消息。在Ubuntu中使用数据显示调试器,我相信这个显示的地址是0x0804811。
当我运行程序并使用 x/16x $esp 时,堆栈中的下一个地址仅为 1s(我猜只有最后两位数字来自上面的地址)
想知道的是如何使下一个地址成为完整地址,而不仅仅是最后两位数字。
32 也是从 16(上面定义的缓冲区)+ 8(基指针)+ 8(指令指针)计算出来的
提前感谢您的帮助,因为我知道这个具体问题。