字符串常量的地址是在编译时决定的。这个地址和字符串常量可以在可执行程序中找到(以ELF格式)。例如,以下代码输出:String Literal: 0x400674
printf("String Literal: %p\n", "Hello World");
执行objdump -s -j .rodata test1
命令后,显示如下:
部分.rodata节的内容如下:
400670 01000200 48656c6c 6f20576f 726c6400 ....Hello World.
....
因此,看起来我可以通过读取可执行程序本身来获取“Hello World”的虚拟地址。
问题:我如何通过读取ELF格式在地址和字符串本身之间建立表/映射/字典?
我正在尝试编写一个独立的Python脚本或C ++程序来读取elf程序并生成该表。如果表中包含额外的映射(而不是字符串文字),则也可以接受,只要表包含整个字符串文字的映射即可。
strings
命令吗? - Basile Starynkevitch