Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}