Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Inline Assembly, C y Pe Header.

Estas en el tema de Inline Assembly, C y Pe Header. en el foro de C/C++ en Foros del Web. Buenas a todos, he estado haciendo este codigo desde hace unos meses.. Y tengo problemas al buscar la API de windows en la memoria (GetProcAddress) ...
  #1 (permalink)  
Antiguo 26/06/2006, 08:50
 
Fecha de Ingreso: enero-2006
Ubicación: mi casa
Mensajes: 255
Antigüedad: 18 años, 4 meses
Puntos: 0
Inline Assembly, C y Pe Header.

Buenas a todos, he estado haciendo este codigo desde hace unos meses.. Y tengo problemas al buscar la API de windows en la memoria (GetProcAddress)
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:
#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;
}
un saludo y gracias de antemano =)
  #2 (permalink)  
Antiguo 08/07/2006, 17:23
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años
Puntos: 0
No me hagas mucho casos pero quizas enpiezas la busqueda en lugar incorrecto.
__________________
-> La duda adecuada es un buen comienzo <-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:59.