Здрайствуйте! прочел, несколько статей Iczelion'а,начал читать переведенный путеводитель..от Billy Belcebu,откопал статейку мэта питрека(ну все как наставляет Iczelion), достал winhex, принялся изучать этот злосчастный ПЕ...через некотрое время меня начали посещать некотрые недопонимания: вопрос первый- можно ли изучать PE-формат открывая hex-редактором файлов с диска, все ли RVA будут считаться валидными(ну всмысле относительно pe заголовка или там начала файла, не суть важно) почему этот вопрос возник, потому что смотрю значение "BaseOfCode" который обычно равен 0х1000, спускаюсь вниз(в хекс редакторе), и внезапно обнаруживаю конец файла. Или мне надо именно промэпировать файл(всмысле средствами винапи). зы.Пардон канечно за явный нубизм, и ламеризм, но я взамешательстве=)
toASMatic:пасиб!но, пока пользуюсь PE Explorer(лимит запусков еще есть) toohne:покачто медитирую над этой формулой. мои непонятки: -в этой статейке, где идет описание IMAGE_FILE_HEADER, есть поле "размер дополнительного заголовка" а здесь в IMAGE_OPTIONAL_HEADER в конце написано размер от PE заголовка. вот я не понимаю, где должны начаться заголовки секций? и что за "размер дополнительного заголовка"?
предыдущий пост с повестки дня снимаю, и с гордостью заявляю - я, допенькал!=D понеопытности, IMAGE_FILE_HEADER тоже включил в этот "размер дополнительного заголовка", и ни как не мог понять что за 0x18h лишние остаються
Код (Text): PIMAGE_NT_HEADERS32 ImageNtHeader; PIMAGE_SECTION_HEADER SectionHeader; hModule = GetModuleHandle( NULL ); ImageNtHeader = (PIMAGE_NT_HEADERS32)( ((PIMAGE_DOS_HEADER)hModule)->e_lfanew + (ULONG_PTR)hModule ); SectionHeader = IMAGE_FIRST_SECTION( ImageNtHeader ); #define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER) \ ((ULONG_PTR)ntheader + \ FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \ ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader \ ))
Таблица заголовков секций идёт сразу после PE-заголовка: Код (Text): IMAGE_NT_HEADERS* ImageNTHeaders(PBYTE pBase) { IMAGE_DOS_HEADER *my_IMAGE_DOS_HEADER = (IMAGE_DOS_HEADER*) pBase; IMAGE_NT_HEADERS *my_IMAGE_NT_HEADERS = (IMAGE_NT_HEADERS*) (pBase + my_IMAGE_DOS_HEADER -> e_lfanew); return my_IMAGE_NT_HEADERS; } WORD NumberOfSections(PBYTE pBase) { IMAGE_NT_HEADERS* NTHeaders = ImageNTHeaders(pBase); return NTHeaders -> FileHeader . NumberOfSections; } IMAGE_SECTION_HEADER* ImageSectionHeaderFirst(PBYTE pBase) { return (IMAGE_SECTION_HEADER*)((DWORD)ImageNTHeaders(pBase) + sizeof(IMAGE_NT_HEADERS)); }
Неправильный подход.Поставь перед собой задачу написать хотя бы PE лоадер для DLL.И вот тогда в процессе воплощения задачи поймешь из чего ,и как PE файл состоит.
не совсем понимаю...мож есть линки?(былбы признателен))) пока цель: самому наити(всмысле хекс редактором), все заголовки и погулять по RVA