用缓冲区溢出更改函数的返回值

时间:2015-06-11 00:58:51

标签: c buffer-overrun

x86系统

我正在尝试更改函数的返回值。例如

int foo(){
   char buffer[12]; 
   gets(buffer);
   return 1;
}

int main(){
   int value;
   value = foo();
   return 0;
}

foo()总是返回1.我知道函数的返回值存储到%eax(所以1存储到%eax)。有什么办法可以达到并改变%eax值吗? 我认为这不可能发生,因为%eax没有出现在堆栈中!我是对的吗?

1 个答案:

答案 0 :(得分:0)

您无法通过缓冲区溢出修改该函数中EAX的值,这正是您猜测的原因。但是,怎么可能接管程序执行,因为你可以覆盖整个堆栈帧,包括保存的帧指针和返回地址。

如何实现这一点似乎超出了你的问题范围,但它将取决于ASLR是否正在使用,堆栈canaries是否正在使用,是否存在非可执行堆栈等。< / p>