6
我是新来的stackoverflow,所以我提前道歉我犯的任何错误。从C程序更改堆栈内存
我碰到过这个C拼图最近。该程序如下。
#include<stdio.h>
void change()
{
}
int main()
{
printf("\nHello");
change();
printf("\nHai");
printf("\nHow are you?");
return 0;
}
预期产量,
Hello
Hai
How are you?
的问题要求我们改变输出的函数变化()
Hello
How are you?
你不应该添加一些代码如下在main()中做任何改变。
我试图通过避免语句printf(“\ nHai”)来更改存储在堆栈内存中的函数change()的返回地址。但是当我使用gcc编译时,我遇到了错误。
我在change()中添加的代码如下所示。
void change()
{
char ch;
*(&ch+10)+=20;
}
的值添加到CH(10和20)被固定,通过使用
objdump -d ./a.out
我希望得到一些建议来解决这个问题。提前感谢您的时间和耐心。
你能发布你得到的错误吗? – nvoigt 2013-03-11 16:33:23
您首先需要进行反汇编,以检查堆栈中返回值的存储位置。 – m0skit0 2013-03-11 16:33:57
如果你不得不依赖未定义的行为来实现结果,我认为这是一个糟糕的“难题”。除非你专业地进入系统安全,否则这些知识是不值得的。 – DevSolar 2013-03-11 16:34:34