Je voudrais simplement charger directement dans gdb
et l'étape à travers elle instruction par instruction, suivi de tous les registres et le contenu de la mémoire que vous aller.
Je suis sûr que je ne vous dis rien que vous ne connaissez pas, mais le programme semble assez simple pour justifier ce genre d'approche. Je voudrais laisser des astuces de débogage fantaisie comme le retour en arrière (et même les points d'arrêt) pour un code plus complexe.
En ce qui concerne le problème spécifique (code paraphrasé ci-dessous):
extern printf
SECTION .data
format: db "%d",0
SECTION .bss
v_0: resb 4
SECTION .text
global main
main:
push 5
pop eax
mov [v_0], eax
mov eax, v_0
push eax
call printf
Vous semblez pousser juste 5 sur la pile suivie par l'adresse de ce 5 dans la mémoire (v_0
). Je suis assez certain que vous aurez besoin de pousser l'adresse de la chaîne de format à un certain moment si vous voulez appeler printf
. Il ne va pas falloir bien vouloir donner une chaîne de format voyous.
Il est probable que votre:
mov eax, v_0
devrait être:
mov eax, format
et je en supposant qu'il n'y a plus de code après appel à printf
que vous venez laissé sans importance (sinon tu partiras pour ne jamais atterrir quand il reviendra).
Exactement le problème - je viens de découvrir ça! Je vous remercie! –