Şu anda PE Base Relocations'ın nasıl kurulduğunu anlamakta zorlanıyorum. Daha bir tehcir o zaman, ben de neden ve nasıl bu yapılır anlıyorum, ama sadece programlı bunu anlamıyorum orada olabileceğini anlıyoruzPE Baz Yerleşimleri nasıl oluşur?
: winnt.h içinde doğrudur Aşağıdakilerden hangisi
(IMAGE_BASE_RELOCATION)?
// Base relocation #1
DWORD VirtualAddress;
DWORD SizeOfBlock; // size of current relocation
WORD TypeOffset[1];
// Base relocation #2
DWORD VirtualAddress;
DWORD SizeOfBlock; // size of current relocation
WORD TypeOffset[1];
// Base relocation #3
DWORD VirtualAddress;
DWORD SizeOfBlock; // size of current relocation
WORD TypeOffset[1];
Ya
DWORD VirtualAddress;
DWORD SizeOfBlock; // size of all relocations
WORD TypeOffset[1]; // relocation #1
WORD TypeOffset[1]; // relocation #2
WORD TypeOffset[1]; // relocation #3
Veya her ikisi yanlıştır? Tüm temel yer değiştirmelerden program aracılığıyla nasıl dönmeliyim?
Şu anda bu kodu var, bir yerde yanlış gibi görünüyor: Bazı koddan
DWORD baseRelocationSize = imageNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;
unsigned int baseRelocationCount = baseRelocationSize/sizeof(IMAGE_BASE_RELOCATION);
DWORD baseDelta = (DWORD_PTR)moduleBase - (DWORD_PTR)imageNtHeaders->OptionalHeader.ImageBase;
IMAGE_BASE_RELOCATION* baseRelocation = (IMAGE_BASE_RELOCATION*)((DWORD_PTR)moduleBase + (DWORD_PTR)imageNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress);
for(unsigned int i = 0; i != baseRelocationCount; ++i)
{
unsigned int entryCount = (baseRelocation->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION))/sizeof(WORD);
for(unsigned int j = 0; j != entryCount; ++j)
{
WORD* entry = (WORD*)((DWORD_PTR)baseRelocation + (DWORD_PTR)sizeof(IMAGE_BASE_RELOCATION));
if((*entry >> 12) & IMAGE_REL_BASED_HIGHLOW)
{
DWORD* pdw = (PDWORD)((DWORD_PTR)moduleBase + (DWORD_PTR)baseRelocation->VirtualAddress + ((*entry) & 0xfff));
(*pdw) += baseDelta;
}
entry++;
}
baseRelocation += baseRelocation->SizeOfBlock;
}
Bu zor bir şey değil mi? –
Taşınmalar gülünç, kimse onları işlemek için doğru yolu biliyor gibi görünüyor. – iDomo
@JohnSmith bunu anladın mı? – Benny