Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт дек 12, 2017 9:02 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 2 сообщения ] 
Автор Сообщение
 Заголовок сообщения: CoffDump
СообщениеДобавлено: Пн июл 31, 2017 10:04 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1082
Программа выводит информацию из объектных модулей формата COFF в консоль. Скриншот вывода:
Спойлер: Показать
Вложение:
CoffDump1.PNG
CoffDump1.PNG [ 15.75 КБ | 253 просмотра ]

Не всегда все имена символов умещаются, поэтому есть опция, чтобы консоль была большего размера, например(ох уж это декорирование!):
Спойлер: Показать
Вложение:
CoffDump2.PNG
CoffDump2.PNG [ 41.44 КБ | 253 просмотра ]

Некоторые улучшения, которые можно сделать:
  • вместо значений показывать имена констант(0 -> UNDEF; -2 -> DEBUG; и т.п.)
  • декодировать поля flags
  • добавить возможность вывода в файл
  • обработка AUX-символов
К сожалению, в документации не про всё инфа есть.
В документации написано
Цитата:
typically not more than one auxiliary symbol-table
record follows a standard symbol-table record (except for .file records with long file
names).

но, как оказалось, не только "except for .file"
Например, существует "Relocation CRC", о котором objdump не знает и вместо этого показывает неверную информацию.

Или вот "line#"
Также и pedump(by Matt Pietrek).
Вот он пишет
Цитата:
I've written a PE and COFF OBJ file dumping program, PEDUMP (see Table 1), that I think provides more understandable output than DUMPBIN.

А выдаёт "<unhandled aux symbol>"

В то же время утилита от Microsoft неверно отображает, если в .file длина имени файла ровно 18 байт.
Она, видимо, считает, что это ASCIIZ, но это не так, а вот утилиты dumpobj от Digital Mars и objdump ведут себя правильно.

Вот эта документация:
'Microsoft Portable Executable and Common Object File Format Specification'
'Revision 11 – June 20, 2017
© 2017 Microsof t Corporation. All rights reserved. '
Вложение:
pecoff.pdf [788.95 КБ]
15 скачиваний


Можно считать, что эта программа — ещё один пример на Delphi под KolibriOS.

Для сборки надо в make.bat задать пути
KOLIBRIOS_PAS - path to KolibriOS.pas
KOLIBRIOS_LIB - path to KolibriOS.lib

KolibriOS.lib можно взять из темы "Delphi7 examples" viewtopic.php?f=33&t=3469

Вложение:
CoffDump.7z [6.41 КБ]
20 скачиваний


Вернуться к началу
 Заголовок сообщения: Re: CoffDump
СообщениеДобавлено: Вс авг 27, 2017 2:52 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1082
Windows-версия программы:
Вложение:
CoffDump.7z [13.91 КБ]
5 скачиваний
Screenshot:
Спойлер: Показать
Вложение:
CoffDump.PNG
CoffDump.PNG [ 17.74 КБ | 149 просмотров ]
Как оказалось, нельзя просто так мешать Write, Printf и WriteConsole. Вывод в консоль работает, однако при перенаправлении вывода в файл(то есть, если сделать CoffDump test.obj >test.txt) в нём оказывается только вывод, сделанный с помощью Write. Можно было либо везде использовать только Write, либо наоборот, нигде не использовать Write. Но мне было проще переделать всё под Printf. Хотя и пришлось немного извратиться
Спойлер: Показать
Код:
...
Function Printf(Format: PChar): Integer; CDecl; VarArgs; External 'msvcrt.dll' name 'printf';
...
Procedure Write(Const Str: PChar); Begin Printf('%s', Str); End;
...         
          Else
          (* copy only 8 chars with a terminating null character *)
          Begin           
            LStrCpyN(PTmpBuf, SymbolName.Name, 8 + 1);
            Write(PTmpBuf);
          End;       
...   


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 2 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB