gpt4 book ai didi

无法利用堆栈溢出

转载 作者:行者123 更新时间:2023-11-30 17:37:52 25 4
gpt4 key购买 nike

我正在学习缓冲区溢出,并且在利用基于堆栈的缓冲区溢出时遇到问题。这是我的程序:

#include <stdio.h>

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

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

最佳答案

您必须查看汇编器中编译后的代码,例如你的 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)]

您必须进行调试才能查看此时堆栈上实际存在的内容,例如如果您在调试中进行编译,堆栈上的内容很可能比您想象的要多得多!

关于无法利用堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com