C缓冲区溢出显示消息(使用Ubuntu和DDD)


#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)
...

相关内容

  • 没有找到相关文章

最新更新