So wandeln Sie eine Funktionsadresse in ein Symbol um

8

Sagen wir, ich habe ein Programm wie dieses

%Vor%

Es druckt einige Zahlen wie

%Vor%

Wie wandle ich diese Zahlen wieder in die richtigen Symbole um? Effektiv würde ich gerne in der Lage sein, dies zu tun

%Vor%

Und lassen Sie es drucken

%Vor%

Ich weiß, dass dies etwas mit dem Debug Interface Access SDK zu tun hat aber mir ist nicht ganz klar, wie ich von einer Adresse zu einem Symbol komme.

    
gman 27.12.2012, 06:19
quelle

2 Antworten

8

Das scheint genau das zu sein, wonach Sie suchen: Abrufen von Symbolinformationen nach Adresse . Dies verwendet DbgHelp.dll und beruht auf dem Aufruf von SymFromAddr . Sie müssen dies (denke ich) in der laufenden Anwendung oder durch Einlesen einer Minidump-Datei tun.

Sie können auch die DIA verwenden, aber die Aufrufsequenz ist etwas komplizierter. Rufen Sie IDiaDataSource :: loadDataForExe und IDiaDataSource :: openSession , um eine IDiaSession , dann IDiaSession::getSymbolsByAddr um IDiaEnumSymbolsByAddr . Dann können Sie IDiaEnumSymbolsByAddr :: symbolByAddr nachschlagen Symbol nach Adresse. Es gibt auch eine Möglichkeit (im Beispiel auf der letzten Verknüpfung gezeigt), alle Symbole aufzulisten.

BEARBEITEN: Diese DIA-Beispielanwendung ist möglicherweise ein guter Ausgangspunkt für die Verwendung von DIA: Ссылка . Besonders die Teile mit IDiaEnumSymbolsByAddr auschecken.

Sie könnten auch die Ausgabe von dumpbin parsen, wahrscheinlich mit der Option / SYMBOLS oder / DISASM.

    
Alex I 04.01.2013, 07:52
quelle
1

Wenn Sie in Linux sind, könnten Sie addr2line

ausprobieren %Vor%     
slggamer 08.01.2013 03:50
quelle