Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Belial & Grimoire en 14 Julio 2013, 02:10 am



Título: error usando linux 64bits en codigo de nasm
Publicado por: Belial & Grimoire en 14 Julio 2013, 02:10 am
hola

tengo una duda, cuando hago un for y un printf juntos, me funciona en 32bits de windows pero en 64 bits de linux, me dice que la instruccion no es soportada para 64 bits, la verdad no he logrado saber si el codigo esta bien o mal hecho por la razon de los 64 bits, a lo cual tambien tengo otra duda

tenia entendido que para usar inc o dec se usaba el registro ecx, pero cuando lo ejecuto usando ecx me da error, y cuando uso ebx me funciona bien cuando lo ejecuto en windows 32bits, alguien sabe cual seria la razon de porque pasa eso?

les dejo el codigo que trato de usar en linux y espero me puedan decir cual es el problema de porque no funciona

Código:
[BITS 64]

section .data

fmt: db "valor = %d",10, 0

section .text

extern printf
global main

main:

mov ebx, 10
loop:

push ebx
push fmt
mov eax, 0
call printf

dec ebx
jnz loop

ret


Título: Re: error usando linux 64bits en codigo de nasm
Publicado por: xv0 en 14 Julio 2013, 03:16 am
La instruccion no soportada es push ebx, en 64 bits solo puedes hacer push a registro de 64 y de 16.

Y sobre el registro ecx, en 64 bits ecx guarda la direccion de .global main, y cuando haces una interrupcion estilo syscall se guarda la direccion que venga despues de ese syscall, puede que suceda lo mismo con la instruccion call.

Un saludo.