[fpc-devel] symify.pp broken
Robert Riebisch
rr at bttr-software.de
Tue Apr 15 11:21:32 CEST 2008
Tomas Hajny wrote:
> However, I can't believe that information about this offset (i.e. size of
> the stub) isn't already available somewhere in the exe file itself (either
> in the general header or possibly in the COFF section headers), I just
The following simple snippet for computing "stubsize" is based on
function "create_go32_stub" in file "gnu\binutl-2.14\bfd\coff-stgo32.c"
from DJGPP's "bnu21?s.zip". Information is available here:
<http://www.delorie.com/djgpp/doc/exe/>. 512 bytes form a page (or
block) as per Microsoft's definition. "tdosheader" is from file
"exeinfo.pp".
***
type
tdosheader = packed record
e_magic : word;
e_cblp : word;
e_cp : word;
e_crlc : word;
e_cparhdr : word;
e_minalloc : word;
e_maxalloc : word;
e_ss : word;
e_sp : word;
e_csum : word;
e_ip : word;
e_cs : word;
e_lfarlc : word;
e_ovno : word;
e_res : array[0..3] of word;
e_oemid : word;
e_oeminfo : word;
e_res2 : array[0..9] of word;
e_lfanew : longint;
end;
var
f: file;
dosheader: tdosheader;
stubsize: cardinal; /* cardinal OK here? */
begin
Assign(f, ParamStr(1));
Reset(f, 1);
BlockRead(f, dosheader, SizeOf(dosheader));
if dosheader.e_magic = $5a4d then
begin
stubsize := dosheader.e_cp * 512;
if dosheader.e_cblp > 0 then
stubsize := stubsize + dosheader.e_cblp - 512;
WriteLn('stub size: ', stubsize);
end;
Close(f);
end.
***
Robert Riebisch
--
BTTR Software
http://www.bttr-software.de/
More information about the fpc-devel
mailing list