Comment trouver la fonction principale du point d'entrée de l'elfe fichier exécutable sans aucune information symbolique?

J'ai développé un petit programme cpp sur la plate-forme de Ubuntu-Linux 11.10.
Maintenant, je veux désosser. Je suis débutant. - Je utiliser de tels outils: GDB 7.0, hte éditeur, hexeditor.

Pour la première fois que j'ai fait c'est assez facile. Avec l'aide de l'information symbolique, j'ai fondé l'adresse de la fonction principale et fait tout ce dont j'avais besoin.
Ensuite, j'ai rayé (--strip-all) exécutable elf-fichier et j'ai quelques problèmes.
Je sais que main fonction commence à partir de 0x8960 dans ce programme.
Mais je n'ai pas une idée de comment je dois faire pour trouver ce point sans cette connaissance.
J'ai essayé de déboguer mon programme étape par étape à l'aide de gdb, mais il va dans __libc_start_main
puis dans la ld-linux.so.3 (donc, il détecte et charge les bibliothèques partagées nécessaires par un programme). J'ai débogué environ 10 minutes. Bien sûr, peut-être dans 20 minutes, je peux atteindre la principale fonction du point d'entrée, mais, il semble, que le moyen plus facile est d'exister.

Que dois-je faire pour trouver la main de la fonction de point d'entrée sans aucune symbolique info?
Pourriez-vous me conseiller quelques bons livres/sites/other_sources de l'ingénierie inverse de elf-fichiers avec l'aide de gdb?
Toute aide serait appréciée.

(ld-linux.n'est-il pas le noyau, c'est l'éditeur de liens dynamique, dans l'espace utilisateur.)
Mat, Ok, je n'ai pas l'esprit, mais la question est la même.
Je pense que la glibc sur x86 pousse main()'s adresse avant d'appeler __libc_start_main sur _start. Au moins, il fait y a pas longtemps.
Oui, vous avez tout à fait raison! J'ai déjà trouvé hier dans une telle manière. 🙂

OriginalL'auteur Lucky Man | 2012-03-27