Bonjour les gens,
En essayant de vieux TD d'asm, je tombe sur ce code:
Code :
- text
- message :
- .ascii "hello world ! \0"
- .align 4
- .global main
- main :
- pushl %ebp
- movl %esp,%ebp
- pushl $message
- call puts
- addl $4,%esp
- movl %ebp,%esp
- popl %ebp
- ret
|
jusqu' ici tout va bien, mais depuis mes années iut, nos braves machines ont 'achement évoluées et sont notamment passées en 64 bits
j'ai donc voulu adapter le code au 64 bits. après moulte recherche je pond ça:
Code :
- .text
- message :
- .ascii "hello world ! \0"
- .align 4
- .global main
- main :
- pushq %rbp
- movq %rsp,%rbp
- pushq $message
- call puts
- addq $4,%rsp
- movq %rbp,%rsp
- popq %rbp
- ret
|
et là paf pastèque ça plante, seg fault, alim qui crame, chinois du fbi qui débarque.
Je me démonte pas, je paye un café au chinois, change d'alim, décompile un prog c, et arrive à ça:
Code :
- .text
- message :
- .string " hello world ! \0 "
- .align 8
- .global main
- main :
- pushq %rbp
- movq %rsp,%rbp
- movl $message, %edi
- call puts
- movq %rbp,%rsp
- popq %rbp
- ret
|
et là ça marche.
Vous allez me dire: "bin du coup pourquoi tu viens nous faire ch***".
Bin le problème c'est que je vois pas pourquoi le pushq $message ne marche plus. des idées?