windows - Indhentning af oplysninger om eksekverbar kode fra exe/pdb

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skal udpakke kode (men ikke data!) Fra klassiske win32 exe/dll filer. Det er klart, at jeg ikke kan gøre dette kun ved udtrækning af kodesegmentindhold (fordi kodesegmentet indeholder også data - hoppetabellerne for eksempel), og at jeg har brug for hjælp fra kompilatoren.


* .map-filer er gode, men de indeholder kun adresser på funktioner, dvs. det sikreste, jeg kan gøre, er at starte på den adresse og til at behandle indtil første retur/hoppe instruktion (fordi en del af funktionen kunne nævnes data)


* .pdb-filer er bedre, men jeg er ikke sikker på, hvilke værktøjer der skal bruges til at udtrække oplysninger som dette - Jeg tog et kig på DbgHelp og DIA SDK, sidstnævnte synes at være det rigtige værktøj, men det ser ikke ud til at være meget simpelt . Så mit spørgsmål/spørgsmål:



  1. Det er muligt at udtrække oplysninger om kode/dataposition (adresse + længde) efter din viden kun via DbgHelp?

  2. Hvis DIA SDK er den eneste vej, har du nogen ide om, hvad skal jeg kræve for at få oplysninger som den? (at COM-stuff er temmelig tung)

  3. Er der nogen anden måde?



Selvfølgelig bekymrer jeg mig om Visual Studio, C/C ++ kilde kompilering i første omgang.


Tak for enhver hint.

Bedste reference


Der er en PDB-ekstraktor til download på siden her: http://undocumented.rawol.com. Det kan hente alle oplysninger, når du bruger indstillingen/type. Der er også en artikel med PDB viewer her: http://www.codeproject.com/KB/bugs/PdbParser.aspx men det uddrager færre oplysninger. [1] [2] [3]


Begge værktøjer leveres med kildekode.

Andre referencer 1


Nå, jeg er lige sket med at læse den anden dag, at DIA er meget lettere at bruge fra C # (links til kilde til et simpelt program); Et andet program, der holder op med mine google-søgninger, er PDB Cracker, som også har kildekode, og er sandsynligvis mere relevant til din påtænkte ansøgning. [4] [5]