我正在做一个基本的缓冲区溢出项目。目标是溢出缓冲区以运行 shell。我正在利用的代码如下所示:
int func(char *str)
{
//4 bytes for str, 16 bytes for the buffer, 4 for the ebp, 4 for the ret
char buffer[12];
/* The following statement has a buffer overflow problem */
strcpy(buffer, str);
return 1;
}
本质上,我正在创建 str 以便它将用一些启动 shell 的 shellcode 的地址覆盖 func() 的返回地址。
如果我使用 gcc -g 选项编译我的代码并在 gdb 中运行可执行文件,一切正常。但是,如果我省略 -g,我会得到一个段错误而不是 shell。
如果我理解正确,这很可能是因为 gdb 将东西添加到堆栈中。这意味着我需要更改用于替换 func 的返回地址的值。我将如何寻找这个新地址?
我尝试添加一个 printf("%p", str); func,然后编译和运行使用和不使用 -g 但这两种方式都会打印相同的东西。我也尝试过其他一些类似的事情。