0

我正在编写 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 部分

感谢您的任何建议

4

1 回答 1

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 规范和适用于SPARC的附录。如果您不是出于教育目的而开始这个项目,我还建议您宁愿使用任何现有的平台和应用程序模拟器,如QEMU

于 2012-05-06T14:56:48.773 回答