小编Emi*_*Tom的帖子

从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)

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

c

6
推荐指数
1
解决办法
343
查看次数

标签 统计

c ×1