no me la encuentra ya que en el debugger veo que a la hora de recorrer la memoria se la salta (ya que la recorre de 4 en 4 y puff)
Código:
un saludo y gracias de antemano =) #include<Windows.h> #include "minimo.h" #include<stdio.h> #include<stdlib.h> #include<winnt.h> int main(void) { DWORD dwAddress,dwPEHeader,dwEAT,dwContador; __asm { mov eax, dword ptr[ebp+04h] xor ax, ax }; { intentar: __try { __asm { cmp word ptr[eax],'ZM' // MZ? je found // yes, found! sub eax,10000h // No? substract 10000h jmp intentar // try again... }; } __except(EXCEPTION_EXECUTE_HANDLER) { goto intentar; }; } /*"kernel base not found"*/ return 0; found: __asm{ mov [dwAddress],eax // eax = 0x7C800000 push ebx // salvamos ebx push edx // salvamos edx xor ebx,ebx // ebx = 0 xor edx,edx // edx =0 mov ebx,[eax+3Ch] // ebx = 0xE8 add ebx,eax // ebx = 0x7C800000 + 0xE8 = 0x7C8000E8 mov [dwPEHeader],ebx // PEHeader = 0x7C8000E8 mov ebx,[ebx+78h] // PEHeader + 0x78 = Export Address Table mov [dwEAT],ebx // EAT = RVA de la Export Address Table (0x262C) add ebx,eax // 0x7C800000 + 0x262C = 0x7C80262C (edata + 20h) mov ecx,[ebx + 18h] mov ebx,[ebx + 20h] add ebx,eax // 0x7C80262C + 20h = 0x7C80264C // ebx = RVA de AddressOfNames (0x3528) dec ecx mov esi,[ebx + ecx * 4] add esi, eax buscar_apis: /* Empieza rutina de busqueda de API GetProcAddress */ // 0x7C800000 + 0x3528 = 0x7C803528 //no encuentro el error!!!! mov ebx,esi cmp dword ptr[ebx],'PteG' add esi,4 jne buscar_apis cmp dword ptr[ebx+4],'Acor' add esi,4 jne buscar_apis cmp dword ptr[ebx+8],'erdd' add esi,4 jne buscar_apis /* mov esi, [dwEAT] add esi,24h add ecx,ecx add esi,ecx add esi,eax mov esi,[esi] */ }; return 1; }