Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: xiruko en 7 Septiembre 2012, 21:53 pm



Título: ejecutable funciona en 1 particion pero en otra no
Publicado por: xiruko en 7 Septiembre 2012, 21:53 pm
buenas a todos,

hace 3 o 4 dias empece con ASM, y la verdad es que de momento solo ha servido para que le tenga una rabia increible a mac... xD

pero bueno al tema, he copiado directamente un programa de una web:
http://fabiensanglard.net/macosxassembly/index.php (http://fabiensanglard.net/macosxassembly/index.php)

el cual es este:
Código
  1. .bss
  2. .data
  3. output:
  4. .asciz "The processor Vendor ID is '%s' \n"
  5. .lcomm buffer, 13
  6.  
  7. .text
  8. .globl _main
  9.  
  10. _main:
  11.  
  12. movl $0, %eax # define cpuid output option
  13. cpuid
  14.  
  15. movl $buffer, %edi # put values in string
  16. movl %ebx, 0(%edi)
  17. movl %edx, 4(%edi)
  18. movl %ecx, 8(%edi)
  19. movl $0, %ecx
  20. movl %ecx, 12(%edi)
  21.  
  22. # Now Calling printf
  23.  
  24. subl $0x4, %esp #padding stack :/ !
  25. pushl $buffer
  26. pushl $output
  27.  
  28. call _printf #macosx need libc  pre_
  29.  
  30. # ESP is at 0xXXXXXXX0 now,
  31. # with MacOS X Special stub it will be at 0xXXXXXXXC
  32. call _exit
  33. nop

el codigo lo he compilado de la siguiente manera (tambien especial para mac...):
Código:
as -arch i386 -o cpuid.o cpuid.s
ld -e _main -o cpuid -lc cpuid.o

y el problema viene a que, si lo ejecuto en la particion donde esta el sistema, el programa funciona correctamente. pero si lo ejecuto en una particion que tengo para mis cosas, el programa da segmentation fault.

en cambio, si compilo el codigo con:
Código:
gcc -arch i386 -o cpuid cpuid.s
el programa funciona en los dos sitios.

alguien sabe a que puede deberse? despues de buscar todas (creo y espero) las diferencias entre el asm de mac y cualquier otro sistema me gustaria al menos rematar la faena y saber por que esto no funciona. si podeis pasarme algun link que hable sobre ello ya estaria mas que satisfecho, ya que directamente no se ni como buscarlo.

un saludo y muchas gracias!