Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: cpu2 en 25 Octubre 2012, 17:24 pm



Título: [Duda] Registros
Publicado por: cpu2 en 25 Octubre 2012, 17:24 pm
Hola

Estoy dando mis primeros pasos con ASM, y me ha surgido este problema.

Código
  1. .section .data
  2.  
  3. msg:
  4.  
  5. .ascii "KPID\n"
  6.  
  7. .section .text
  8.  
  9. .globl _start
  10.  
  11. _start:
  12.  
  13. movl $4, %eAX
  14. movl $1, %eBX
  15. movl $msg, %eCX
  16. movl $5, %eDX
  17.  
  18. int $0x80
  19.  
  20. movl $37, %eAX
  21. movl $1375, %eBX
  22. movl $9, %eCX
  23.  
  24. int $0x80
  25.  
  26. xorl %eAX, %eAX
  27.  
  28. movl $1, %eAX
  29. movl $0, %eBX
  30.  
  31. int $0x80

Este código lo escribo y ejecutó en una máquina de 32 bits, cuando lo paso a la mía que es de 64 bits.

El resultado es esté:
Código:
Bad system call (core dumped)

Leyendo documentación:

Citar
rdi - used to pass 1st argument to functions
rsi - used to pass 2nd argument to functions
rdx - used to pass 3rd argument to functions
rcx - used to pass 4th argument to functions
r8 - used to pass 5th argument to functions
r9 - used to pass 6th argument to functions

Dejo el código así:

Código
  1. .section .data
  2.  
  3. msg:
  4.  
  5. .ascii "KPID\n"
  6.  
  7. .section .text
  8.  
  9. .globl _start
  10.  
  11. _start:
  12.  
  13. movq $4, %rAX
  14. movq $1, %rDI
  15. movq $msg, %rSI
  16. movq $5, %rDX
  17.  
  18. int $0x80
  19.  
  20. movq $37, %rAX
  21. movq $1375, %rDI
  22. movq $9, %rSI
  23.  
  24. int $0x80
  25.  
  26. xorq %rAX, %rAX
  27. movq $1, %rAX
  28. movq $0, %rBX
  29.  
  30. int $0x80

La llamada a write funciona, pero a la de kill no, me apaga el sistema.

Utilice otras llamadas simples como mkdir o rmdir, y ninguna funciona en 64 bits pero si en 32 bits.

¿Son los registros o el sistema?

Utilizo OpenBSD.

Un saludo.