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没有出现在堆栈中!我是对的吗?
答案 0 :(得分:0)
您无法通过缓冲区溢出修改该函数中EAX
的值,这正是您猜测的原因。但是,怎么可能接管程序执行,因为你可以覆盖整个堆栈帧,包括保存的帧指针和返回地址。
如何实现这一点似乎超出了你的问题范围,但它将取决于ASLR是否正在使用,堆栈canaries是否正在使用,是否存在非可执行堆栈等。< / p>