Page 1 of 1

CoffDump

Posted: Mon Jul 31, 2017 10:04 pm
by 0CodErr
Программа выводит информацию из объектных модулей формата COFF в консоль. Скриншот вывода:
Spoiler:
CoffDump1.PNG
CoffDump1.PNG (15.75 KiB)
Viewed 5922 times
Не всегда все имена символов умещаются, поэтому есть опция, чтобы консоль была большего размера, например(ох уж это декорирование!):
Spoiler:
CoffDump2.PNG
CoffDump2.PNG (41.44 KiB)
Viewed 5922 times
Некоторые улучшения, которые можно сделать:
  • вместо значений показывать имена констант(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 KiB)
Downloaded 369 times
Можно считать, что эта программа — ещё один пример на Delphi под KolibriOS.

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

KolibriOS.lib можно взять из темы "Delphi7 examples" http://board.kolibrios.org/viewtopic.php?f=33&t=3469
CoffDump.7z (6.41 KiB)
Downloaded 349 times

Re: CoffDump

Posted: Sun Aug 27, 2017 2:52 pm
by 0CodErr
Windows-версия программы:
CoffDump.7z (13.91 KiB)
Downloaded 338 times
Screenshot:
Spoiler:
CoffDump.PNG
CoffDump.PNG (17.74 KiB)
Viewed 5818 times
Как оказалось, нельзя просто так мешать Write, Printf и WriteConsole. Вывод в консоль работает, однако при перенаправлении вывода в файл(то есть, если сделать CoffDump test.obj >test.txt) в нём оказывается только вывод, сделанный с помощью Write. Можно было либо везде использовать только Write, либо наоборот, нигде не использовать Write. Но мне было проще переделать всё под Printf. Хотя и пришлось немного извратиться
Spoiler:

Code: Select all

...
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;       
...