0

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 没有出现在堆栈中!我说的对吗?

4

1 回答 1

0

EAX由于您推测的原因,您将无法通过缓冲区溢出修改该函数中的值。然而,如何可能接管程序执行,因为您可以覆盖整个堆栈帧,包括保存的帧指针和返回地址。

如何做到这一点似乎超出了您的问题范围,但这取决于是否正在使用 ASLR、是否正在使用堆栈金丝雀、是否存在不可执行的堆栈等。

于 2015-06-11T02:18:52.447 回答