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
or gdb
等等,需要查看内存地址位于哪个部分/段?
C 程序不可能绝对确定地知道其变量所在的部分。这就像海森堡不确定性原理一样——仅仅获取变量的地址就可以使其存在于内存中,否则它可以通过优化完全消除。
因此使用readelf
or gdb
or objdump
,他们正在解码实际的可执行文件。
原则上,ELF 标头应该加载到内存中,您可以从中推断出各个部分,并且您可以读取/proc/xx/maps
在 Linux 等上,但是......除非真正尝试编写调试器、垃圾收集器等,否则我不会打扰。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)