Эльф в память изображения для моделирования

Я пишу имитационную модель 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 .. .............
  ...

Q: Что означают все точки в последнем столбце?

В: Есть ли лучший способ сгенерировать образ памяти из исполняемого файла elf? Думаю, мне нужно скопировать только разделы .text, .rodata и .data

спасибо за любые предложения


person Neha Karanjkar    schedule 06.05.2012    source источник
comment
Файлы elf просты для чтения, библиотеки не требуются, просто получите спецификацию, в которой есть структуры, используемые файлом. У меня есть несколько парсеров elf для разных процессоров. github.com/dwelch67 Я думаю, что msp430sim и amber_samples, возможно, используют парсеры elf . elf адаптирован для вашего процессора, сравните дизассемблеры с тем, что вы извлекаете, например.   -  person old_timer    schedule 06.05.2012
comment
Точки используются только для обозначения непечатаемых символов; только печатаемые символы ASCII отображаются как сами собой в этом последнем столбце.   -  person Ernest Friedman-Hill    schedule 06.05.2012


Ответы (1)


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.

person SquareRootOfTwentyThree    schedule 06.05.2012