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
Código:
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
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
mov rcx, offset[WStp] mov rdx, [wsaddr] call GetProcAddress mov[wtaddr], rax
Código
mov rdx, offset[WStp] mov r8, [wsaddr] call GetProcAddress mov[wtaddr], rax
tambien intente mover rsp, con 30h, 20h, etc, leyendo mas encontre
Código:
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