int KPEFile::EnumExported(void) { IMAGE_EXPORT_DIRECTORY * pExportDir; pExportDir = (IMAGE_EXPORT_DIRECTORY *) RealAddress( m_pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); if (pExportDir == NULL) return 0; DWORD * namerva = (DWORD *) RealAddress((unsigned) pExportDir->AddressOfNames); if (namerva == NULL) return 0; int count = 0; for (unsigned i=0; i<pExportDir->NumberOfNames; i++) { const char * pName = (const char *) RealAddress(namerva[i]); if (pName) { if ( !FuncEnumCallBack(pName) ) break; count ++; } } return count; }
bool KPEFile::Load(const TCHAR * filename) { m_pBaseAddress = (char *) LoadLibrary(filename); // m_pBaseAddress = (char *) LoadLibraryEx(filename, NULL, LOAD_LIBRARY_AS_DATAFILE); // if ((unsigned) m_pBaseAddress & 1 ) // m_pBaseAddress --; if (m_pBaseAddress==NULL) return false; m_pDOSHeader = (PIMAGE_DOS_HEADER) m_pBaseAddress; if ( IsBadReadPtr(m_pBaseAddress, sizeof(IMAGE_DOS_HEADER)) ) return false; if ( m_pDOSHeader->e_magic != IMAGE_DOS_SIGNATURE ) return false; m_pNTHeader = (IMAGE_NT_HEADERS *) RealAddress(m_pDOSHeader->e_lfanew); return m_pNTHeader->Signature == IMAGE_NT_SIGNATURE; }
static Int4 CheckHashTable(void) { register Int4 i; STSHashPtr sts; Nlm_MemMapPtr mmp; Uint4Ptr int_ptr, tmp_ptr; Int4 TotalCount =0; /* Now, lets try to read this map file */ mmp = Nlm_MemMapInit(MemMapFileName); MMAddress = mmp->mmp_begin; printf("Allocated %d bytes of memory on address %x\n", mmp->file_size, MMAddress); int_ptr = (Uint4Ptr) MMAddress; if((sts = (STSHashPtr)(RealAddress(int_ptr[7733]))) == (STSHashPtr)MMAddress) { printf("No entries found\n"); exit(1); } printf("Off = %d Org = %d Len = %d " "Pr1=%d Pr2=%d Next= %d\n", sts->offset, sts->organism, sts->len, sts->pr1, sts->pr2, sts->next ); printf("Primer1 = %s, Primer2 = %s\n", RealAddress(sts->pr1), RealAddress(sts->pr2) ); tmp_ptr = (Uint4Ptr)(RealAddress(int_ptr[7733])); printf("\nMM Start address %x\n", MMAddress); printf("\nRelative address %lu, Real Address %x\n", int_ptr[0], tmp_ptr); for(i=0; i < 120; i++) { printf("%ld ", tmp_ptr[i]); } printf("\nNext STS:\n"); tmp_ptr = (Uint4Ptr)(RealAddress(sts->next)); printf("\nRelative address %lu, Real Address %x\n", sts->next, tmp_ptr); for(i=0; i < 12; i++) { printf("%ld ", tmp_ptr[i]); fflush(stdout); } printf("\n"); sts = (STSHashPtr)(MMAddress + (Int4)(sts->next)); printf("\n Offset = %d Organism = %d Length = %d\n", sts->offset, sts->organism, sts->len); return TotalCount; }