Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Aug 25, 2019 7:45 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 2 posts ] 
Author Message
 Post subject: CoffDump
PostPosted: Mon Jul 31, 2017 10:04 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Программа выводит информацию из объектных модулей формата COFF в консоль. Скриншот вывода:
Spoiler: Show
Attachment:
CoffDump1.PNG
CoffDump1.PNG [ 15.75 KiB | Viewed 1783 times ]

Не всегда все имена символов умещаются, поэтому есть опция, чтобы консоль была большего размера, например(ох уж это декорирование!):
Spoiler: Show
Attachment:
CoffDump2.PNG
CoffDump2.PNG [ 41.44 KiB | Viewed 1783 times ]

Некоторые улучшения, которые можно сделать:
  • вместо значений показывать имена констант(0 -> UNDEF; -2 -> DEBUG; и т.п.)
  • декодировать поля flags
  • добавить возможность вывода в файл
  • обработка AUX-символов
К сожалению, в документации не про всё инфа есть.
В документации написано
Quote:
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).
Вот он пишет
Quote:
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. '
Attachment:
pecoff.pdf [788.95 KiB]
Downloaded 97 times


Можно считать, что эта программа — ещё один пример на 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

Attachment:
CoffDump.7z [6.41 KiB]
Downloaded 96 times


Top
   
 Post subject: Re: CoffDump
PostPosted: Sun Aug 27, 2017 2:52 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Windows-версия программы:
Attachment:
CoffDump.7z [13.91 KiB]
Downloaded 79 times
Screenshot:
Spoiler: Show
Attachment:
CoffDump.PNG
CoffDump.PNG [ 17.74 KiB | Viewed 1679 times ]
Как оказалось, нельзя просто так мешать Write, Printf и WriteConsole. Вывод в консоль работает, однако при перенаправлении вывода в файл(то есть, если сделать CoffDump test.obj >test.txt) в нём оказывается только вывод, сделанный с помощью Write. Можно было либо везде использовать только Write, либо наоборот, нигде не использовать Write. Но мне было проще переделать всё под Printf. Хотя и пришлось немного извратиться
Spoiler: Show
Code:
...
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;       
...   


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 2 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited