2017-08-03 5 views
1

Gibt es eine Möglichkeit, die vollständige Adresse in objdump zu erhalten? Befehl verwendet wird, ist: objdump -d prognameObjdump zeigt keine vollständige Adresse

enter image description here

Die führenden Nullen die nicht korrekt sind. Die Adressen sollten wie folgt sein:

enter image description here

Die letzten drei Werte in der Adresse korrekt sind; aber ich würde sehr gerne die vollständige Adresse in objdump gezeigt werden.

+0

Beginnen diese Adressen mit * null *? –

+0

Nein, wenn ich es in edb starte, werden die Adressen als zweites Bild angezeigt. –

+0

Ich denke, meine erste Frage wäre, suchen Sie eine physische oder virtuelle Adresse? Zweitens, glaube ich nicht, dass "objdump" weiß, wo der Kernel die Anwendung zur Laufzeit platziert, und noch weniger wahrscheinlich, dass sie die physikalische Adresse kennen würde. –

Antwort

2

Bevor Ihre Anwendung geladen wird, können Sie nicht sagen, wo sie im Speicher enden wird.

Versuchen Sie, den folgenden Code:

#include <stdio.h> 
int main() 
{ 
    printf("%p\n", main); 
} 

Kompilieren es mit gcc test.c und mehrmals ausgeführt werden.

Meine Ergebnisse zeigen:

0x55f71f8936b0 
0x5630ed7ff6b0 
0x558a18eea6b0 
... 

So können Sie nicht sicher wissen, wo sie im Speicher enden wird. Ich glaube, das war nicht immer der Fall, und dieses Verhalten ist als Sicherheits-Ding gedacht. Ich wäre nicht überrascht, wenn ältere Kernel/Loader bei jedem Lauf die gleiche Adresse hätten. Das weiß ich allerdings nicht genau.

Natürlich objdump werden Sie relative Adressen geben:

00000000000006b0 <main>: 

Beachten Sie, dass die Ausgabe dieses Programms nicht Sie physikalischen Adressen nicht geben, sind sie immer noch virtuell.

Der Punkt ist, dass durch objdump sind eine Verantwortung der Linker und tatsächlichen virtuellen Adressen von jeder Ausführung abgeladen Adressen gibt es wegen der loader.

+0

Ok, das macht eine Menge seit. Ich arbeitete an einem älteren Kernel und machte kürzlich den Wechsel zu einem neueren Kernel. Habe gerade nicht gemerkt, dass es dieses nette Sicherheitsmerkmal gab. Ich schaute eine Weile nach, bevor ich nachgab und fragte. Ich vermute, ich habe nach dem Falschen gesucht. Wie auch immer, danke für die Info. –

+0

Bitte beachten Sie, dass die letzte Adresse des Symbols, die Sie verwenden, nicht für objdump verfügbar ist. Mit dem älteren Loader könnten diese Runtime-Adressen bei jedem Lauf gleich sein, aber das ist der einzige Unterschied, denke ich. –

Verwandte Themen