no logro invocar a getprocaddress en masm 64 bits

Iniciado por Belial & Grimoire, 6 Agosto 2013, 03:30 AM

0 Miembros y 1 Visitante están viendo este tema.

Belial & Grimoire

hola

estuve investigando sobre el tema de rcx - r8, y encontre que hay que alinear reservando espacio para los registros que seria 20h, no tengo bien entendido si tambien hay que reservar espacio para las API o para los CALL, en un foro resolvieron un problema sumando 8

sub rsp, 20h

sub rsp, 20h + 8

pero en un tutorial dice que call manda de retorno 8 bytes, asi que si 20h son 32 bytes, serian 32 + 8 = 40 entonces seria

sub rsp, 28h

It is the caller's responsibility to allocate 32 bytes of "shadow space" (for storing RCX, RDX, R8, and R9 if needed) before calling the function.

asi lo he hecho en este momento y al parecer funciono al inicio, antes solo cargaba estas dll

'C:\Windows\System32\ntdll.dll' cargado. Símbolos cargados.
'C:\Windows\System32\kernel32.dll' cargado. Símbolos cargados.
'C:\Windows\System32\KernelBase.dll' cargado. Símbolos cargados

cuando agregue 28h, cargaron las demas dll

'C:\Windows\System32\ntdll.dll' cargado. Símbolos cargados.
'C:\Windows\System32\kernel32.dll' cargado. Símbolos cargados.
'C:\Windows\System32\KernelBase.dll' cargado. Símbolos cargados.
'C:\Windows\System32\ws2_32.dll' cargado. Símbolos cargados.
'C:\Windows\System32\msvcrt.dll' cargado. Símbolos cargados.
'C:\Windows\System32\rpcrt4.dll' cargado. Símbolos cargados.
'C:\Windows\System32\nsi.dll' cargado. Símbolos cargados.

este es el codigo

Código (asm) [Seleccionar]


extrn LoadLibraryA:PROC
extrn ExitProcess:PROC

.data

wsdll db "ws2_32.dll",0
wsaddr dq ?


.code
Start proc
push rbp
mov rbp, rsp
sub rsp, 28h

mov rcx, offset [wsdll]
call LoadLibraryA
mov[wsaddr], rax


xor ecx, ecx
call ExitProcess

mov rsp, rbp
pop rbp

Start endp

End


ahora quise continuar con GetProcAddress, pero aqui no logro avanzar, ahora se interrumpe la ejecucion en el call de getprocaddress, lo que significa que vuelve a retornar 0, intente varias formas, por ejemplo

Código (asm) [Seleccionar]
mov rcx, offset[WStp]
mov rdx, [wsaddr]
call GetProcAddress
mov[wtaddr], rax


Código (asm) [Seleccionar]
mov rdx, offset[WStp]
mov r8, [wsaddr]
call GetProcAddress
mov[wtaddr], rax


tambien intente mover rsp, con 30h, 20h, etc, leyendo mas encontre

It is the caller's responsibility to clean the stack after the call.

asi que quise borrar usando add rsp, 28h y volviendo a reservar sub rsp, 28h,tambien add rsp, 8h, add rsp, 10h,  pero nada,
me podrian ayudar un poco con esto porfavor?

salu2
.                                 

Flamer

hola Belial no te compliques la vida al llamar las apis asi, mejor usa el IDE de RadASM para programar junto con Masm32 usa una VM con xp aqui te dejo un link.

ricardonarvaja.info/WEB/OTROS/DE%20LA%20LISTA%20MASM32-RADSM/CURSO%20DE%20ASM%20DESDE%20CERO/


saludos flamer

MCKSys Argentina

@Belial & Grimoire: No he usado MASM en 64 bits, pero he visto que JWASM es mejor: http://www.japheth.de/JWasm.html.

Fijate los samples que hay, por ej.: http://www.japheth.de/JWasm/Win64_1.html

Eso te dará una idea del tema y aparte, es compatible con MASM... :)

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Belial & Grimoire

hola flamer

gracias, se ve interesante y trae buenos ejemplos, lo estoy checando

lo que sucede es que estoy usando a nasm con gcc para programar en ensamblador, y lo estaba haciendo en windows 7 de 32 bits con virtualbox, pero necesitaba usar la particion de windows que tengo instalado en mi computadora , asi que pase el codigo que tenia en virtualbox a la particion con windows para seguir estudiando, pero investigando sobre socket, encontre algunos hechos para linux en 64 bits, entonces se me hizo interesante y quise hacerlo para windows, y me dio curiosidad de rehacer el mismo codigo que habia hecho en 32bits pero en 64bits para aprender mas

ahora buscando informacion y con la ayuda que he recibido, logre entender cosas que no habia logrado entender usando asm de 32bits, creo por eso me gusta complicarme, porque me ayuda a encontrar informacion o comprender cosas que no entendia en su momento

gracias nuevamente por el link, y espero puedan me ayudar con el codigo de arriba

salu2  ;D
.