Je suis à l'extérieur gdb cible exécutable et je n'ai même pas une pile qui correspond à la cible. Je veux une seule étape, de toute façon, de sorte que je puisse vérifier ce qui se passe dans mon code assembleur, parce que je ne suis pas un expert en x86 assemblée. Malheureusement, gdb refuse de faire ce montage simple-niveau de débogage. Il me permet de définir et d'arrêter sur les points d'arrêt, mais dès que j'essaie d'en une seule étape à partir de, gdb signale l'erreur "Impossible de trouver les limites de la fonction en cours" et le PROGRAMME ne change pas.
Détails supplémentaires:
Le code machine généré par gcc asm états et je l'ai copié sur la mémoire du noyau emplacement où il est en cours d'exécution, à partir de la sortie de objdump -d. Je ne me dérangerait pas d'une façon simple d'utiliser un chargeur pour charger mon code objet d'un déménagé adresse, mais gardez à l'esprit le chargement doit être fait dans un module du noyau.
Je suppose que l'autre alternative serait de produire un faux module de noyau ou les informations de débogage du fichier à donner à gdb, pour l'obliger à croire que cette zone est dans le code du programme. gdb fonctionne très bien sur le noyau de l'exécutable lui-même.
(Pour ceux qui veulent vraiment savoir, je suis de l'insertion de code lors de l'exécution dans le noyau Linux de données de l'espace à l'intérieur d'un VMware VM et le débogage de gdb de débogage à distance au noyau via VMware Workstation est intégré dans gdb stub. Notez que je n'écris pas de noyau exploits; je suis une sécurité, un étudiant diplômé de l'écriture d'un prototype.)
(Je peux mettre un point d'arrêt sur chaque instruction à l'intérieur de mon assemblée. Cela fonctionne, mais serait assez laborieux après un certain temps, car la taille de x86 instructions de montage varie et l'emplacement de l'assemblée changera à chaque fois que je redémarre.)