Wie finden Sie die main-Funktion ist der Einstiegspunkt der elf-executable-Datei, ohne jede symbolische Informationen?

Entwickelte ich ein kleines cpp-Programm auf der Plattform von Ubuntu-Linux 11.10.
Jetzt möchte ich mittels reverse-Engineering es. Ich bin Anfänger. Ich solche tools verwenden: GDB 7.0, hte-editor, hexeditor.

Für das erste mal habe ich es ziemlich einfach. Mit Hilfe von symbolischen Informationen, die ich gegründet die Adresse der main-Funktion und gemacht alles, was ich brauchte.
Dann habe ich gestreift (--strip-all) ausführbare elf-Datei und ich habe einige Probleme.
Ich weiß, dass main Funktion startet von 0x8960 in diesem Programm.
Aber ich habe keine Ahnung, wie sollte ich diesen Punkt zu finden, ohne dieses wissen.
Ich habe versucht, meine debug das Programm Schritt für Schritt mit gdb aber es geht in __libc_start_main
dann in die ld-linux.so.3 (also, er findet und lädt die shared libraries benötigt ein Programm). Ich gedebuggt es etwa 10 Minuten. Natürlich, kann in 20 Minuten kann ich erreichen, die wichtigste Funktion ist der Einstiegspunkt, aber es scheint, dass die einfache Möglichkeit hat, zu existieren.

Was sollte ich tun, um zu finden, die main - Funktion ist der Einstiegspunkt, ohne jegliche symbolische info?
Könnten Sie mir raten, ein paar gute Bücher/Webseiten/other_sources von reverse-engineering von elf-Dateien mit Hilfe von gdb?
Jede Hilfe würde geschätzt werden.

  • (ld-linux.so ist nicht der kernel, es ist der dynamische linker im user-space.)
  • Mat, Ok, ich bin nicht dagegen, aber die Frage ist die gleiche.
  • Ich denke, glibc auf x86 schiebt main()'s Adresse vor dem Aufruf __libc_start_main auf _start. Zumindest ist es nicht lange her.
  • Ja, Sie haben Recht! Habe ich auch schon gefunden es gestern so. 🙂
InformationsquelleAutor Lucky Man | 2012-03-27
Schreibe einen Kommentar