无法利用堆栈溢出

时间:2014-03-08 07:01:25

标签: c buffer

我正在学习缓冲区溢出,我在利用基于堆栈的缓冲区溢出方面遇到了问题。 这是我的计划:

#include <stdio.h>

void func(){
    printf("asd");
}
main(){
    char buf[10];
    scanf("%s", &buf);
}

我用A(缓冲区和旧EIP地址)覆盖前14个字节。我的目标是执行func函数,或者用它的地址更改EIP。但我总是得到非法指令。我检查了函数的HEX地址;我以相反的顺序写了它们,它们是正确的。

1 个答案:

答案 0 :(得分:0)

你必须在汇编程序中查看已编译的代码,例如 你的main()可能看起来像:

    char buf[10];
    scanf("%s", &buf);
00D7B938  mov         esi,esp  
00D7B93A  lea         eax,[ebp-14h]  
00D7B93D  push        eax  
00D7B93E  push        offset string "%s" (0D818D4h)  
00D7B943  call        dword ptr [__imp__scanf (0D89684h)]  

您必须进行调试以查看此时堆栈上的实际内容,例如如果你正在编译调试,很可能在堆栈上的数量比你想象的还要多!