【发布时间】:2015-08-26 12:03:27
【问题描述】:
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 没有出现在堆栈中!我说的对吗?
【问题讨论】:
-
foo总是返回1,因为你是return 1;。找出你想要返回的内容,然后return the_value;。在 x86 汇编中,参数在堆栈上提供给被调用方,返回值在 EAX 中(不在堆栈上)返回给调用方。 -
我认为他是在尝试破解现有程序,而不是重新编写代码。
-
再看一遍。我认为你是对的。感谢您的澄清。
-
我不想“修复”我的代码。我正在尝试使用缓冲区溢出来更改 foo 运行时的返回值
标签: c buffer-overrun