【发布时间】:2015-02-20 05:08:00
【问题描述】:
字符串文字的地址在编译时确定。该地址和字符串文字可以在构建的可执行程序(ELF 格式)中找到。比如下面的代码输出String Literal: 0x400674
printf("String Literal: %p\n", "Hello World");
而objdump -s -j .rodata test1 显示
.rodata 部分的内容:
400670 01000200 48656c6c 6f20576f 726c6400 ....你好世界。
....
所以看起来我可以通过读取可执行程序本身来获取“Hello World”的虚拟地址。
问题:如何通过读取 ELF 格式在字符串文字的地址和字符串本身之间建立表/映射/字典?
我正在尝试编写一个独立的 python 脚本或 c++ 程序来读取 elf 程序并生成表。如果表中有额外的映射(不是字符串文字)是可以的,只要表包含字符串文字的整个映射。
【问题讨论】:
-
这是 ELF 不是 EFL。您发现自己是一个 ELF 阅读库并使用它,或者为您感兴趣的版本找到自己的 ELF 格式规范并编写自己的。图书馆推荐在这里是题外话。
-
你为什么要问?你知道
strings命令吗? -
请编辑您的问题以改进它并提供一些动力...
-
@BasileStarynkevitch 动机是以最小的开销将字符串文字传递给另一个进程。由于我们可以从 exe 文件中获取字符串文字,因此无需将字符串复制到内存中以便另一个进程可以使用。
-
请编辑您的问题。你绝对错了:根据定义,两个不同的进程在虚拟内存中有不同的地址空间!