2017-02-20 41 views
-3

Я пытаюсь сбрасывать содержимое двоичного файла, который получается как содержимое буфера двоичных объектов структуры C в моем встроенном SW. В настоящее время я могу добиться этого, выполнив следующие действия в GDBЕсть ли более простой способ сбросить C-структуру, захваченную в файле bin, используя GDB

  1. путь к файлу/к/myelf.elf
  2. запустить путь/к/myelf.elf
  3. Ctrl-C, чтобы отправить SIGINT
  4. восстановить путь/к/mybin.bin 0xADDRESS
  5. р * (* my_c_strct) 0xADDRESS

Даже если все это работает без подключения к моей доске с помощью JTAG, на мой вопрос, почему я должен «г un "файл elf и" восстановить "содержимое файла bin в память, а затем только" print "my_c_struct?

В идеальном мире я бы хотел иметь инструмент, к которому, если я предоставляю следующее, он сбрасывает содержимое моей структуры. Может быть, есть еще один инструмент, который я могу использовать в цепочке инструментов GNU для этого, о котором я не знаю!

  1. Обеспечивают символьный файл
  2. Обеспечить мой бин дамп
  3. , а затем распечатать my_c_struct

Спасибо ВСЕ.

+1

Вы спрашиваете, что такое ** G ** NU ** d ** e ** b ** ugger? – Olaf

+0

Ваш идеальный инструмент требует всего 3 шага, а для gdb требуется 4 шага (ввод 'run file.elf'). Похоже, он делает именно так, как вы пожелаете?gdb также может делать огромное количество других вещей, одна дополнительная команда кажется небольшой ценой. – bkjvbx

+0

IIRC, gdb - с открытым исходным кодом - не стесняйтесь исправить его по вашим спецификациям. – KevinDTimm

ответ

1

Вы не объяснили , как вы "восстанавливаете" содержимое. Я предполагаю, что вы используете команду GDB restore.

почему я должен «работать» эльфа файл

Команда restore выполняет fopen/fread, а затем записывает целевую память, и для что он нуждается подчиненный процесс (который созданный командой run).

и «восстановить» содержимое файла бен в памяти

Очевидно GDB должен как-то имеют доступ к данным для его отображения. Один из способов (как вы это делаете) - иметь данные в памяти.

Другой способ - сообщить GDB, что память была похожа на время выполнения, достигнутое командой core.

К сожалению, эта команда нуждается в фактическом правильно отформатированном файле ядра, чтобы сообщить ему, где в памяти биты находились во время выполнения. You может упаковать ваши данные в основной файл с Perl script, но это, скорее всего, больше проблем, чем того стоит.

+0

Спасибо за ваш ответ, что помогает. –

+0

BTW. Да, я использую команду restore в GDB. –