我想在C语言中跳过一行,在主要部分使用缓冲区溢出技术跳过x=1;
这一行;然而,尽管我从<main+35>
到<main+42>
计算了7个字节,但我不知道为什么我无法跳过从4002f4
地址到下一个地址4002fb
。
我还在Debian和AMD环境下配置了随机化和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;
}
$esp
中的x/i10
并将其添加到您的说明中。此外,请展示从function
开始执行指令时发生的情况。 - Alex Brown