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
mov[valor], eax call [valor]
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
extrn LoadLibraryA:PROC extrn ExitProcess:PROC extrn GetProcAddress:PROC .data wstart db 400 dup (0) wsdll db 'ws2_32.dll',0 wsaddr dq ? WStp db 'WSAStartup',0 wstaddr dq ? soc db 'socket',0 socaddr dq ? conn db 'connect',0 conaddr dq ? sen db 'send',0 senaddr dq ? sre db "hola mundo",0 .code Start proc push rbp mov rbp, rsp mov rdx, offset[wsdll] call LoadLibraryA mov[wsaddr], rax mov r8, offset[WStp] mov r9, [wsaddr] call GetProcAddress mov[wstaddr], rax lea rcx,[wstart] push rcx push 2 call [wstaddr] mov r8, offset[soc] mov r9, offset[wsaddr] call GetProcAddress mov[wstaddr], rax push 0 push 1 push 2 call [wstaddr] mov[socaddr], rax mov r8, offset[conn] mov r9, offset[wsaddr] call GetProcAddress mov[conaddr], rax push 16 xor rax, rax mov rax, 0100007f5c110002h push rax push qword ptr[socaddr] call [conaddr] mov r8, offset[sen] mov r9, offset[wsaddr] call GetProcAddress mov[senaddr], rax push 0 push 50 mov rcx, offset [sre] push rcx push qword ptr[socaddr] call [senaddr] xor ecx, ecx call ExitProcess mov rsp, rbp pop rbp Start endp End
si encuetran codigo muy raro, es que use varias formas que encontraba en google pero ninguna funciono, aunque espero siga siendo entendible
salu2