0
일부 기능을 내보내는 DLL이 있고 해당 DLL 내의 주소를 알고 있다고 가정합니다. 수출 테이블을 가정하고 그 주소는 함수 내에서 위치를 참조 경우 다음이 기능 항목으로 분류되면, 수출 테이블에서이 함수의 인덱스 찾아 낼 것입니다 다음특정 주소에서 심볼의 이름/내보내기 색인을 얻는 방법 (GetProcAddress inverse)
IMAGE_DOS_HEADER* dosHeader;
dosHeader = (IMAGE_DOS_HEADER*)m_handle;
unsigned int count;
if(dosHeader->e_magic != IMAGE_DOS_SIGNATURE)
{return __MODULE_ADDRESS_NOT_FOUND;}
IMAGE_NT_HEADERS* ntHeaders = (IMAGE_NT_HEADERS*)(((BYTE*)dosHeader) + dosHeader->e_lfanew);
if(ntHeaders->Signature != 0x00004550)
{return __MODULE_ADDRESS_NOT_FOUND;}
IMAGE_OPTIONAL_HEADER* optionalHeader = &ntHeaders->OptionalHeader;
if(optionalHeader->NumberOfRvaAndSizes<IMAGE_DIRECTORY_ENTRY_EXPORT)
{return __MODULE_ADDRESS_NOT_FOUND;}
if(optionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size==0)
{return __MODULE_ADDRESS_NOT_FOUND;}
IMAGE_DATA_DIRECTORY* dataDirectory = &optionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
IMAGE_EXPORT_DIRECTORY* Exp;
Exp = (IMAGE_EXPORT_DIRECTORY*)((DWORD)dosHeader + dataDirectory->VirtualAddress);
ULONG* addressoffunctions=(ULONG*)((BYTE*) m_handle + Exp->AddressOfFunctions);
if(Exp->NumberOfNames==1)
{
if(addressoffunctions[0] + (BYTE*)m_handle < address)
{return 0;}
return __MODULE_ADDRESS_NOT_FOUND;
}
for(count = 1; count < Exp->NumberOfNames; count++)
{
if(addressoffunctions[count-1] + (BYTE*)m_handle >= address
&& addressoffunctions[count] + (BYTE*)m_handle < address)
{return count-1;}
}
을, 주소가 내 보낸 함수 내의 위치를 실제로 참조한다고 주장하는 방법은 무엇입니까?