gpt4 book ai didi

c - 可能知道变量所在的内存部分?

转载 作者:行者123 更新时间:2023-12-05 08:49:10 25 4
gpt4 key购买 nike

在 C 程序中有什么方法可以知道变量所在的部分吗?例如:

char*   str     = "Word1";
char str2[] = "Word2";


printf("String1: %s | Location: %p\n", str, str); // <-- would be on the stack
printf("String2: %s | Location: %p\n", str2, str2); // <-- would be in .rodata
etc.

或者是否需要像 readelfgdb 等来查看内存地址位于哪个部分/段?

最佳答案

C 程序不可能绝对确定其变量所在的部分。这就像海森堡不确定性原理 - 仅仅获取变量地址的行为就可以使它存在于内存中,否则它可以通过优化完全消除。

因此使用 readelfgdbobjdump,它们正在解码实际的可执行文件。

原则上,ELF header 应该加载到内存中,您可以从中推断出这些部分,并且您可以在 Linux 上阅读 /proc/xx/maps 等等,但是......除非实际上尝试编写调试器、垃圾收集器等,我不会打扰。

关于c - 可能知道变量所在的内存部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64585825/

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