Título: problema con masm para 64bits Publicado por: Belial & Grimoire en 5 Agosto 2013, 02:56 am hola
tuve curiosidad de pasar el socket que hice a 64 bits, pero tambien tuve problemas para vincular obj a exe, ya que gcc en windows solo funciona para 32bits, hay una version para 64 pero me tira errores, asi que opte por golink, pero encontre que se podia usar masm desde Visual studio, asi que opte por usar masm hay algunas diferencias en entre nasm y masm sobre el codigo, pero tenia entendido que es mas universal asm, asi que para no complicarme hice el mismo codigo que ya tenia pero con las diferencias de masm, el codigo al compilarlo no me produce errores, pero aparece la pantalla de interrupcion que menciona que hay un error en ejecucion, desafortunadamente ollydbg tampoco funciona para ejecutables de 64 bits y no tengo mucha experiencia con el debugger que viene por defecto en visual studio, pero puse algunos break y tira el error en el primer "call", y posiblemente son todos los call en nasm normalmente lo uso asi Código
pero creo en masm eso no funciona, ya googlé varias veces, pero no encuentro como usar call en masm para 64 bits, o cual es la diferencia, etc, todo lo que encuentro es para 32bits alguien podria explicarme, porque no funciona el codigo que hice?, acabo de empezar en estos dias con masm, asi que todavia hay diferencias que no comprendo, y siento que lo mas recomendable para ensamblador en windows seria masm y en linux seria nasm por cierto, si me recomiendan mejor usar el IDE de masm en vez de Visual studio, puedo hacer el cambio, lo que sucede es que uso Visual Studio para programar en C o visual basic, aunque me gusta mas usar MinGW con codeblocks, pero ya que tengo esa IDE instalada, decidi mejor programar alli tambien en ensamblador les dejo el codigo Código
si encuetran codigo muy raro, es que use varias formas que encontraba en google pero ninguna funciono, aunque espero siga siendo entendible salu2 Título: Re: problema con masm para 64bits Publicado por: Eternal Idol en 5 Agosto 2013, 10:08 am Otra vez sin linea de comandos eh, yo use MASM:
ml64 /Zi /DEBUG sock64.asm /link /entry:Start /subsystem:console kernel32.lib Otra vez tenes que DEPURAR tu codigo. ¿De donde sacaste la informacion sobre la convencion de llamadas en x64? El primer parametro va en RCX, el segundo en RDX, el tercero en R8, el cuarto en R9 y despues en la pila. Obviamente al llamar a LoadLibraryA no le estas pasando el nombre de la DLL donde se debe (en RCX) asi que esta retorna 0. Ahora segui vos con el resto ... http://en.wikipedia.org/wiki/X86_calling_conventions#Microsoft_x64_calling_convention Título: Re: problema con masm para 64bits Publicado por: Belial & Grimoire en 5 Agosto 2013, 16:42 pm disculpa, lo que sucede es que en visual studio se configura en opciones como se va a compilar sin necesidad de linea de comandos y lo de las llamadas lo saque de donde encontraba información en google, por eso esta revuelto
pero gracias, voy a seguir estudiando lo que mencionas salu2 Título: Re: problema con masm para 64bits Publicado por: Eternal Idol en 5 Agosto 2013, 17:58 pm De nadas ::)
Título: Re: problema con masm para 64bits Publicado por: x64core en 8 Agosto 2013, 20:35 pm Ademas, se debe de seguir correctamente la convension de llamadas para 64-bits,
Se deja un padding que se le llama shadow space antes de llamar a una funcion y algunos detalles mas aqui: http://en.wikipedia.org/wiki/X86_calling_conventions mirar M x64 calling convention |