从C程序更改堆栈内存

Emi*_*Tom 6 c

我是stackoverflow的新手,所以我提前为我犯下的任何错误道歉.

我最近遇到过这个C拼图.该计划如下.

#include<stdio.h>

void change()
{

}

int main()
{
 printf("\nHello");
 change();
 printf("\nHai");
 printf("\nHow are you?");
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

预期的输出是,

Hello
Hai
How are you?
Run Code Online (Sandbox Code Playgroud)

问题要求我们通过在函数change()中添加一些代码来更改输出

Hello
How are you?
Run Code Online (Sandbox Code Playgroud)

你不应该在main()中做任何改变.

我试图通过避免语句printf("\nHai")来更改存储在堆栈内存中的函数change()的返回地址.但是当我使用gcc编译时,我遇到了错误.

我在change()中添加的代码如下所示.

void change()
{
 char ch;
 *(&ch+10)+=20;
} 
Run Code Online (Sandbox Code Playgroud)

添加到ch(10和20)的值通过使用来固定

objdump -d ./a.out
Run Code Online (Sandbox Code Playgroud)

我希望收到一些解决问题的建议.提前感谢您的时间和耐心.

Ace*_*e.C 2

下面的代码应该可以达到预期的效果。

#include<stdio.h>
#include <stdlib.h>

void change()
{
printf("\nHow are you?"); 
exit(0);
}

int main()
{
 printf("\nHello");
 change();
 printf("\nHai");
 printf("\nHow are you?");
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码将使程序打印“Hello”,然后执行change()函数,该函数将打印“How are you?” 换行,然后退出程序。exit() 函数是 c 标准库的一部分,如下所示