Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: BioHazardTM en 20 Diciembre 2011, 13:46 pm



Título: [SOLUCIONADO]Problema con sufijos en ASM de AT&T
Publicado por: BioHazardTM en 20 Diciembre 2011, 13:46 pm
Hola buenas, tengo un problema al ensamblar un programa escrito en ensamblador con sintaxis de AT&T en un ordenador Linux de 64 bits.
El problema es que al ensamblar con:
Código
  1. gcc -nostartfiles -g -o power power.s

Me da estos errores:
Código:
power.s: Assembler messages:
power.s:10: Error: operand type mismatch for `push'
power.s:17: Error: operand type mismatch for `pop'
power.s:24: Error: operand type mismatch for `push'
power.s:45: Error: operand type mismatch for `pop'

Si pongo pushb, pushw, pushl o pushq no se soluciona el problema.
A ver si me podéis ayudar.


Este es mi programa fuente:
Código
  1. .section .data
  2. .section .text
  3. .globl _start
  4. _start:
  5. push $3
  6. push $2
  7. call power
  8. add $8, %esp
  9.  
  10. push %eax
  11.  
  12. push $2
  13. push $5
  14. call power
  15. add $8, %esp
  16.  
  17. pop %ebx
  18. add %eax, %ebx
  19. mov $1, %eax
  20. int $0x80
  21.  
  22. .type power, @function
  23. power:
  24. push %ebp
  25. mov %esp, %ebp
  26. sub $4, %esp
  27.  
  28. mov 8(%ebp), %ebx
  29. mov 12(%ebp), %ecx
  30.  
  31. mov %ebx, -4(%ebp)
  32.  
  33. power_loop_start:
  34. cmp $1, %ecx
  35. je end_power
  36. mov -4(%ebp), %eax
  37. imul %ebx, %eax
  38. mov %eax,-4(%ebp)
  39. dec %ecx
  40. jmp power_loop_start
  41.  
  42. end_power:
  43. mov -4(%ebp), %eax
  44. mov %ebp, %esp
  45. pop %ebp
  46. ret
  47.  


Título: Re: Problema con sufijos en ASM de AT&T
Publicado por: Eternal Idol en 20 Diciembre 2011, 14:14 pm
Estas trabajando con los registros de 32 bits (eax vs rax, etc.) y usando la convencion de llamada x86 ...

http://en.wikipedia.org/wiki/Stdcall#System_V_AMD64_ABI_convention

Tal vez estas buscando esto:
http://code.google.com/p/ass-ground-up/source/browse/assembly/power.s?spec=svnf0f0de9b6a6e9a69a98afd87f0fe3e82960f5361&r=f0f0de9b6a6e9a69a98afd87f0fe3e82960f5361


Título: Re: Problema con sufijos en ASM de AT&T
Publicado por: BioHazardTM en 20 Diciembre 2011, 15:08 pm
Gracias por responder Eternal Idol, al final lo he solucionado ensamblando y linkeando por separado para una máquina de 32 bits que es como he aprendido a programar.

Código
  1. as --32 -o power.o power.s
  2. ld -m elf_i386 -o power power.o