精灵到记忆图像进行模拟

时间:2012-05-06 14:36:33

标签: simulation elf readelf

我正在编写Sparc V8的C ++仿真模型。内存简单地建模为数组。 我需要读取交叉编译器生成的elf可执行文件,并使用它来初始化内存。我计划如下做。

sparc-elf-readelf --hex-dump=.text --hex-dump=.rodata --hex-dump=.data <elf-file> > dump.txt
grep "0x" dump.txt >dump2.txt

这会生成一个(地址,单词,单词)格式文本文件,如下所示:

  0x00000000 88100000 09000000 81c120b0 01000000 .......... .....
  0x00000010 91d02000 01000000 01000000 01000000 .. .............
  0x00000020 91d02000 01000000 01000000 01000000 .. .............
  0x00000030 91d02000 01000000 01000000 01000000 .. .............
  0x00000040 91d02000 01000000 01000000 01000000 .. .............
  0x00000050 a1480000 29000000 81c521a8 01000000 .H..).....!.....
  0x00000060 a1480000 29000000 81c52220 01000000 .H..)....." ....
  0x00000070 91d02000 01000000 01000000 01000000 .. .............
  ...

问:最后一栏中的所有点都是什么?

问:有没有更好的方法从elf可执行文件生成内存映像?我想我只需要复制.text,.rodata和.data部分

感谢任何建议

1 个答案:

答案 0 :(得分:2)

Q: What are all the dots in the last column?

正如欧内斯特所说,他们是不可打印的角色。也就是说,每个字节都不符合7位(不是ASCII)或低于0x20(控制ASCII字符)。

Q: Is there a better way to generate a memory image from the elf executable? I think I need to copy only the .text, .rodata and .data sections

你的方法根本行不通。 ELF格式不仅仅是提供有关部分将在内存中的位置的信息;它还包含解析动态符号和重定位的说明。你需要的是一个记忆图像加载器活动发生之后。

我建议您阅读ELF specification以及适用于SPARC的附录。 如果您不是出于教育目的而进入该项目,我还建议您使用任何现有的平台和应用程序模拟器,如QEMU