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

在 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 等等,但是......除非实际上尝试编写调试器、垃圾收集器等,我不会打扰。

https://stackoverflow.com/questions/64585825/

相关文章:

python - 使用 boto3 获取新创建的亚马逊 ec2 实例的公共(public) IPv4

assembly - 如何将浮点常量移动到 FP 寄存器中?

r - 匹配和替换字符向量中的单词

algorithm - 如果这个更简单、更快的算法有效,为什么我们需要 Dijkstra 算法?

reactjs - 在 Next.js 中替换查询中的值

python - 为什么我的 Django 表单不是 "valid"?无法获取更新数据库的 POST

java - 给定算法的时间复杂度是多少?

python - 是否可以设置 lint 自定义设置并忽略 pylance

r - 如何在 R Shiny 应用程序中对齐 downloadButton 和 ActionBut

kubernetes - 如何在我的 configmap.yaml (Helm) 中使用 json