gpt4 book ai didi

从 C 程序更改堆栈内存

转载 作者:太空狗 更新时间:2023-10-29 17:25:12 26 4
gpt4 key购买 nike

我是 stackoverflow 的新手,所以对于我犯的任何错误,我提前道歉。

我最近遇到了这个 C 谜题。程序如下。

#include<stdio.h>

void change()
{

}

int main()
{
printf("\nHello");
change();
printf("\nHai");
printf("\nHow are you?");
return 0;
}

预期的输出是,

Hello
Hai
How are you?

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

Hello
How are you?

您不应该在 main() 中进行任何更改。

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

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

void change()
{
char ch;
*(&ch+10)+=20;
}

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

objdump -d ./a.out

我希望收到一些解决问题的建议。预先感谢您的时间和耐心等待。

最佳答案

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

#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;
}

此代码将使程序打印“Hello”,然后执行将打印“How are you?”的 change() 函数。在换行符上,然后退出程序。 exit() 函数是 c 标准库的一部分,可以看出 Here

关于从 C 程序更改堆栈内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15343685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com