Excellent work ... Thanks !
I was using the tool with some map file and I got an AV error. I started investigating and I found a bug in the map parser :
// debug.info.reader.map.pas (line 349):
var SegmentID: Cardinal := HexToInt16(Reader.LineBuffer, n);
The SegmentID should be read as a DECIMAL value and not as a HEX ! if the map file contains more than 9 segment, the next segment is emitted like (0010:xxxxx) but you're reading it like a hex (so its ID becomes 16 !) and then there is this line
FSegments[ListIndex] := Result; // FSegments[10 .. ListIndex - 1] = nil => AV
A simple fix :
function DecToInt32(const s: string; var Offset: integer): integer;
var
P: PChar;
begin
Result := 0;
P := PChar(s);
while Ord(P^) in [$30 .. $39] do
begin
Result := (Result * 10) + (Ord(P^) - $30);
Inc(P);
Inc(Offset);
end;
end;
// ...
var SegmentID: Cardinal := DecToInt32(reader.LineBuffer, n);