Формат MAP-файла, генерируемый компилятором или линкеро

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Сообщение Cheb » 12.04.2008 17:16:20

12.04.2008: обновление. Исправлен баг в brutalstrip, почём зря вырезавшей из dll секцию .reloc, в результате чего они не грузились.

http://www.chebmaster.narod.ru/soft/libs_chelinfo.html
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Сообщение ViTality » 14.04.2008 09:41:37

Cheb
Насколько brutalstrip эффективнее чем strip идущий с fpc (в плане уменьшения размера исполняемого файла)?
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение *vmr » 14.04.2008 14:45:05

http://www.koders.com/delphi/fid268D5BE ... ?s=network

Код: Выделить всё
unit uDebug;
// ------------------------------------------------------------------
// Unit name: uDebug
// Author:    Eddy Vluggen
// Purpose:   Unit to make debugging easier
// ------------------------------------------------------------------

interface

function LoadAndParseMapFile: Boolean;
procedure CleanUpMapFile;
function GetMapAddressFromAddress(const Address: Cardinal): Cardinal;
function GetMapFileName: string;
function GetModuleNameFromAddress(const Address: Cardinal): string;
function GetProcNameFromAddress(const Address: Cardinal): string;
function GetLineNumberFromAddress(const Address: Cardinal): string;

******
Аватара пользователя
*vmr
постоялец
 
Сообщения: 168
Зарегистрирован: 08.01.2007 01:46:07
Откуда: Киев

Сообщение Cheb » 15.04.2008 02:01:19

Насколько brutalstrip эффективнее чем strip идущий с fpc (в плане уменьшения размера исполняемого файла)?

Вопрос неверен.
Он просто умеет удалять то, чего strip удалять *не* умеет (т.е. информацию в формате dwarf2).
strip работает по принципу "чего не понимаю - того не трогаю".
brutalstrip - "всё, что не разрешено - запрещено". На то он и брутал. Но список секций там зашит в константу-массив, исходник прилагается, так что правится это всё одним движением левой пятки.

unit uDebug;

Спасибо за ссылку, попробую найти применение.
Сам юнит для меня бесполезен, поскольку не GNU GPL.

З.Ы. И дата - 2001 год - не звучит обнадёживапюще.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Сообщение Attid » 15.04.2008 09:48:17

И дата - 2001 год - не звучит обнадёживапюще.

а формат исполняемого файла за последнии лет 10 менялся ? =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение *vmr » 15.04.2008 11:20:45

>З.Ы. И дата - 2001 год - не звучит обнадеживающе.
Ну у нас с Delphi7 он работает на ура (именно с помощью его и смотрим сохраненные "развертки" стека при креше/экзепшенах)
Аватара пользователя
*vmr
постоялец
 
Сообщения: 168
Зарегистрирован: 08.01.2007 01:46:07
Откуда: Киев

Сообщение Padre_Mortius » 15.04.2008 11:57:49

То что отрабатывает на бинарниках, созданных Delphi, просто ломает бинарники от fpc.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Cheb » 15.04.2008 13:07:57

И вообще весь смысл за бруталстрипом - "а вот хорошо бы иметь свои тулзы для работы с экзешниками, с исходниками на Паскале, легко модифицируемые и перестраиваемые, и не зависеть от чужого дяди".

Ну у нас с Delphi7 он работает на ура

ФПЦ, в отличие от Дельфи, развивается стремительно. Оборотная сторона этого - всё столь же стремительно устаревает. Форматы меняются, сменяются другими... Только успевай поспевать да адаптироваться :(
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Сообщение *vmr » 15.04.2008 14:01:50

А причем сдесь компилятор???
Дело то в том что .MAP есть .MAP и он не меняется (или меняется?)

ЗЫ: А от операционки он зависит?
Аватара пользователя
*vmr
постоялец
 
Сообщения: 168
Зарегистрирован: 08.01.2007 01:46:07
Откуда: Киев

Сообщение Sergei I. Gorelkin » 15.04.2008 19:47:41

С появлением внутреннего линкера как раз формат .map и изменился. Причем, по-моему, не в лучшую сторону.
А так как внутренний линкер есть не на всех платформах, то выходит что формат стал зависеть от операционки :)
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Формат MAP-файла, генерируемый компилятором или линке

Сообщение ViTality » 29.04.2008 16:34:10

хм... у меня чегото brutalstrip не компилиться
Код: Выделить всё
c:\chelinfo>fpc brutalstrip
Free Pascal Compiler version 2.2.0 [2007/11/14] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Win32 for i386
Compiling brutalstrip.pp
Compiling un_lineinfo.pp
Compiling un_xtrctdwrflnfo.pp
un_xtrctdwrflnfo.pp(118,2) Warning: Illegal compiler directive "$IOERRORS"
un_xtrctdwrflnfo.pp(373,6) Note: Local variable "fo" not used
un_xtrctdwrflnfo.pp(374,3) Note: Local variable "IsExternal" not used
un_xtrctdwrflnfo.pp(647,30) Warning: Local variable "cofftable" does not seem to
be initialized
un_xtrctdwrflnfo.pp(560,8) Note: Local variable "j" not used
un_xtrctdwrflnfo.pp(562,5) Note: Local variable "p" not used
un_xtrctdwrflnfo.pp(563,5) Note: Local variable "ib" not used
un_xtrctdwrflnfo.pp(737,27) Warning: Mixing signed expressions and longwords giv
es a 64bit result
un_xtrctdwrflnfo.pp(679,8) Note: Local variable "j" not used
un_xtrctdwrflnfo.pp(679,11) Note: Local variable "n" not used
un_xtrctdwrflnfo.pp(679,23) Note: Local variable "rmv" not used
un_xtrctdwrflnfo.pp(680,5) Note: Local variable "dlil" is assigned but never use
d
un_xtrctdwrflnfo.pp(681,5) Note: Local variable "p" not used
un_xtrctdwrflnfo.pp(682,5) Note: Local variable "ib" not used
un_xtrctdwrflnfo.pp(682,17) Note: Local variable "maxrvl" not used
un_xtrctdwrflnfo.pp(115,3) Note: Local variable "ELFDlin" not used
un_xtrctdwrflnfo.pp(116,3) Note: Local variable "ZELFDlin" not used
un_xtrctdwrflnfo.pp(259,3) Note: Local variable "ExeFileName" not used
un_xtrctdwrflnfo.pp(260,3) Note: Local variable "header" not used
un_xtrctdwrflnfo.pp(261,3) Note: Local variable "strtab_header" not used
un_xtrctdwrflnfo.pp(262,3) Note: Local variable "cursec_header" not used
un_xtrctdwrflnfo.pp(264,3) Note: Local variable "buf" not used
un_lineinfo.pp(339,9) Note: Local variable "temp" is assigned but never used
un_lineinfo.pp(414,22) Warning: Mixing signed expressions and longwords gives a
64bit result
un_lineinfo.pp(418,34) Warning: Mixing signed expressions and longwords gives a
64bit result
un_lineinfo.pp(422,26) Warning: Mixing signed expressions and longwords gives a
64bit result
un_lineinfo.pp(468,38) Warning: Mixing signed expressions and longwords gives a
64bit result
un_lineinfo.pp(274,5) Note: Local variable "temp_length" not used
un_lineinfo.pp(281,5) Note: Local variable "c" not used
un_lineinfo.pp(283,5) Note: Local variable "b" not used
brutalstrip.pp(54,27) Error: Incompatible types: got "TMemoryStream" expected "T
FileStream"
brutalstrip.pp(68) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: C:\lazarus\fpc\2.2.0\bin\i386-win32\ppc386.exe returned an error exitcode
(normal if you did not specify a source file to be compiled)

fpc от релизного лазаруса 0.9.24
а разве так вообще можно?
объявлять как TFileStream
Код: Выделить всё
  f,f2: TFileStream;

а использовать как TMemoryStream
Код: Выделить всё
    then f:= TMemoryStream.Create
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: Формат MAP-файла, генерируемый компилятором или линке

Сообщение Cheb » 02.05.2008 16:35:55

Странно. У меня всё компилировалось.
В принципе, такой бред должен давать ошибки только в рантайме - да и то если повезёт.
Наверно от конфига компилятора зависит.

В любом случае, поправил на TStream и перезакачал архив.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Формат MAP-файла, генерируемый компилятором или линке

Сообщение halyavin » 05.05.2008 15:22:25

Я пишу на паскале dll'ку, которая затем используется в java-программе (не хочу связываться с gui на паскале). Иногда в этой dll'ке возникают исключения. Можно ли использовать ваши разработки в этой ситуации? Ведь java-машина ставит свои обработчики исключений...

На сколько я понимаю, мне придется окружить весь код функций в try-catch, но вот как вывести информацию по перехваченному исключению с помощью un_lineinfo я понять не могу :( .
halyavin
новенький
 
Сообщения: 25
Зарегистрирован: 23.10.2007 16:35:55

Re: Формат MAP-файла, генерируемый компилятором или линке

Сообщение alexs » 05.05.2008 15:51:53

Отладь сначала dll в родной для неё среде. :D
используй побольше логирования - во всех подозрительных местах вставь запись промежуточных данных в лог.
Получится гораздо удобнее, чем сидеть с отладчиком и трасить весь код.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Формат MAP-файла, генерируемый компилятором или линке

Сообщение halyavin » 06.05.2008 10:27:54

Прога занимается перебором огромного числа вариантов. Если ошибка происходит не на первых шагах расчета - разобраться в отладочном выводе не возможно. Поэтому место исключения знать очень важно. Я уж не говорю о том, что поиск строки с помощью отладочного вывода занимает очень много времени.
halyavin
новенький
 
Сообщения: 25
Зарегистрирован: 23.10.2007 16:35:55

Пред.След.

Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru