C assembleur
Fermé
coindreauc
-
7 mai 2011 à 01:08
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 8 mai 2011 à 00:19
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 8 mai 2011 à 00:19
2 réponses
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
946
7 mai 2011 à 04:28
7 mai 2011 à 04:28
Es-tu certain que ton stack frame est initialisé correct dans la fonction plus
J'ai essayé ceci:
mais cela coince visiblement.
Regarde ici:
http://www.unixwiz.net/techtips/win32-callconv-asm.html
A bientôt.
Johan
J'ai essayé ceci:
johand@osiris:~/src/asm$ cat plus.s .globl plus plus: enter 0, 0 movl 8(%ebp), %eax addl 12(%ebp), %eax leave ret johand@osiris:~/src/asm$ as -g -o plus.o plus.s plus.s: Assembler messages: plus.s:3: Error: too many memory references for 'enter'
mais cela coince visiblement.
Regarde ici:
http://www.unixwiz.net/techtips/win32-callconv-asm.html
A bientôt.
Johan
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
946
Modifié par jisisv le 8/05/2011 à 09:33
Modifié par jisisv le 8/05/2011 à 09:33
Tu as raison . J'ai fait de l'assembleur Borland il y a belle lurette.
enter $0, $0 s'assemble correctement avec l'assembleur Gnu.
Après linkage et passage sous gdb:
5+7 vaut 12 comme chacun le sait.
Je ne sai pas par contre, comment redonner la main au système dans main()
Johan
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
enter $0, $0 s'assemble correctement avec l'assembleur Gnu.
Après linkage et passage sous gdb:
ohand@osiris:~/src/asm$ as -g -o main.o main.s johand@osiris:~/src/asm$ as -g -o plus.o plus.s johand@osiris:~/src/asm$ ld -g -o main main.o plus.o ld: warning: cannot find entry symbol _start; defaulting to 0000000008048054 johand@osiris:~/src/asm$ gdb main <cut /> (gdb) break 11 Breakpoint 1 at 0x804806c: file main.s, line 11. (gdb) run Starting program: /home/johand/src/asm/main Breakpoint 1, main () at main.s:11 11 call plus (gdb) s plus () at plus.s:3 3 enter $0, $0 (gdb) s 4 movl 8(%ebp), %eax (gdb) s 5 addl 12(%ebp), %eax (gdb) s 7 leave (gdb) info r eax 0xc 12 ecx 0x0 0 edx 0x0 0 ebx 0x0 0 esp 0xbffff294 0xbffff294 ebp 0xbffff294 0xbffff294 esi 0x0 0 edi 0x0 0 eip 0x8048082 0x8048082 <plus+10> eflags 0x206 [ PF IF ] cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x0 0
5+7 vaut 12 comme chacun le sait.
Je ne sai pas par contre, comment redonner la main au système dans main()
Johan
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
7 mai 2011 à 13:16
sinon, en lisant, j'ai l'impression d'avoir bien fait les choses.