Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > C / C++ > Problema analizando la IAT en C++
-Foros de debate

C / C++
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Problema analizando la IAT en C++
Enviado por jose maria el día 30 de junio de 2008

Hola a todos.

Tengo un problema y no se como resolverlo. Agradeceria muchisimo cualquier ayuda.

Vereis he copiado este codigo tal cual y al compilarlo con el Dev C++ 4 me ha soltado algunos errores. Los he resuelto casi todos, pero hay uno que se me resiste.

El codigo es el siguiente:

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
int i;
if(argc != 2){
printf("Pasale un parametro !");
return 0;
}
HANDLE fichero = CreateFile((LPCTSTR)argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(fichero == INVALID_HANDLE_VALUE){
printf("Error abriendo el fichero");
return 0;
}
printf("IAT de %s\n", argv[1]);
DWORD size = GetFileSize(fichero, NULL);
BYTE *buf = (BYTE *)malloc(size);
DWORD bytesleidos;
ReadFile(fichero, buf, size, &bytesleidos, NULL);
if(size == bytesleidos){
PIMAGE_DOS_HEADER pIDH = (PIMAGE_DOS_HEADER)buf;
if(pIDH->e_magic == IMAGE_DOS_SIGNATURE){ //MZ
PIMAGE_NT_HEADERS pINH = (PIMAGE_NT_HEADERS)&buf[pIDH->e_lfanew];
unsigned long ITdir = pINH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
PIMAGE_SECTION_HEADER pISH;
for(i = 0; i < pINH->FileHeader.NumberOfSections; i++){
pISH = (PIMAGE_SECTION_HEADER)&buf[pIDH->e_lfanew + sizeof(IMAGE_NT_HEADERS) + i*sizeof(IMAGE_SECTION_HEADER)];
if(pISH->VirtualAddress <= ITdir && pISH->VirtualAddress + pISH->SizeOfRawData > ITdir){
printf("Tabla IAT encontrada en sección: %s\n", pISH->Name);
break;
}
}
if(i != pINH->FileHeader.NumberOfSections){
printf("Inicio FisicalAddress de la IAT: 0x%08X\n", pISH->PointerToRawData + ITdir - pISH->VirtualAddress);
printf("Inicio VirtualAddress de la IAT: 0x%08X\n", pINH->OptionalHeader.ImageBase + ITdir);
PIMAGE_IMPORT_DESCRIPTOR pIID = (PIMAGE_IMPORT_DESCRIPTOR)&buf[ITdir - pISH->VirtualAddress + pISH->PointerToRawData];
while(pIID->Characteristics != 0){
printf("%s:\n", &buf[pIID->Name - pISH->VirtualAddress + pISH->PointerToRawData]);
PIMAGE_THUNK_DATA pITD = (PIMAGE_THUNK_DATA)&buf[pIID->OriginalFirstThunk - pISH->VirtualAddress + pISH->PointerToRawData];
while(pITD->u1.AddressOfData != NULL){
if((DWORD)pITD->u1.AddressOfData & 0x80000000)
printf(" Ord: %d\n", (DWORD)pITD->u1.AddressOfData & 0x7FFFFFFF);
else{
PIMAGE_IMPORT_BY_NAME pIIBN = (PIMAGE_IMPORT_BY_NAME)&buf[(DWORD)pITD->u1.AddressOfData - pISH->VirtualAddress + pISH->PointerToRawData];
printf(" %s\n", pIIBN->Name);
}
pITD++;
}
pIID++;
}
}
}
}
free(buf);
CloseHandle(fichero);
return 1;
}



Hay un error que no consigo resolver y me tiene loco. He buscado por internet pero no acabo de aclararme.

El error es el siguiente:

invalid types 'BYTE *[_IMAGE_THUNK_DATA *]' for array subscript

y me lo da en esta linea:

PIMAGE_THUNK_DATA pITD = (PIMAGE_THUNK_DATA)&buf[pIID->OriginalFirstThunk - pISH->VirtualAddress + pISH->PointerToRawData];

No entiendo muy bien que esta pasando, pero calculo que se trata de alguno de los parametros entre los corchetes del buf, pero ni idea.

Alguien puede ayudarme con este error.

Gracias

 

Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network