我想跳过C中的一行x=1;,主要部分中的行使用bufferoverflow; 但是,我不知道为什么我不能跳过的地址4002f4下一个地址4002fb尽管如此,我就指望7个字节形式的事实<main+35>来<main+42>.
我还在Debian和AMD环境中配置了randomniZation和execstack环境的选项,但我还是得到了x=1;.这个程序有什么问题?
我用dba来调试堆栈和内存地址:
0x00000000004002ef <main+30>: callq 0x4002a4 **<function>**
**0x00000000004002f4** <main+35>: movl $0x1,-0x4(%rbp)
**0x00000000004002fb** <main+42>: mov -0x4(%rbp),%esi
0x00000000004002fe <main+45>: mov $0x4629c4,%edi
void function(int a, int b, int c)
{
char buffer[5];
int *ret;
ret = buffer + 12;
(*ret) += 8;
}
int main()
{
int x = 0;
function(1, 2, 3);
x = 1;
printf("x = %i \n", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试了解堆栈基础溢出并编写一个简单的代码来利用堆栈.但不知怎的,它根本不起作用,只显示我的机器上的Abort陷阱(mac os豹)
我猜Mac OS对待溢出的方式不同,它不允许我通过c代码覆盖内存.例如,
strcpy(buffer, input) // lets say char buffer[6] but input is 7 bytes
Run Code Online (Sandbox Code Playgroud)
在Linux机器上,此代码成功覆盖下一个堆栈,但在mac os上被阻止(Abort trap)
任何人都知道如何在mac机器上执行简单的堆栈溢出?