#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("Hellon");
}
int main()
{
f(32,0x08048411);
return 0;
}
这是我到目前为止得到的代码(得到了它的基础,并坚持它,这就是为什么有一个badf和f函数)
目的是程序通过溢出到指令指针来打印Hello消息。在Ubuntu中使用数据显示调试器,我相信这个显示的地址是0x0804811。
当我运行程序并使用x/16x $esp时,堆栈中的下一个地址只是15(我猜只有最后两位数字是从上面的地址中取出的)
我想知道的是如何使下一个地址是完整的地址,而不仅仅是最后两位数字。
32也是从16(上面定义的缓冲区)+ 8(基指针)+ 8(指令指针)计算出来的
提前感谢你的帮助,因为我知道这个具体的问题。
不要通过8位整数(char
)传递地址,而是使用足够宽的类型…-至少32位
修改如下:
void badf(int n, unsigned int u, char* buffer)
...
void f(int n, unsigned int u)
...