在 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.
或者是否需要像 readelf
或 gdb
等来查看内存地址位于哪个部分/段?
最佳答案
C 程序不可能绝对确定其变量所在的部分。这就像海森堡不确定性原理 - 仅仅获取变量地址的行为就可以使它存在于内存中,否则它可以通过优化完全消除。
因此使用 readelf
或 gdb
或 objdump
,它们正在解码实际的可执行文件。
原则上,ELF header 应该加载到内存中,您可以从中推断出这些部分,并且您可以在 Linux 上阅读 /proc/xx/maps
等等,但是......除非实际上尝试编写调试器、垃圾收集器等,我不会打扰。
https://stackoverflow.com/questions/64585825/