Привет! всем! Как узнать точку входу в заголовке где начинается код ? в статьях запутался у меня в книге одно в статье инете другое подскажите ...
test896 Один может взять CFF Explorer и открыть в нём какой-нибудь модуль. Можно будет видеть структуру заголовков "как есть".
Если ты запутался, значит, нечто изучаешь. (Наверное, формат PE-файла) Покажи, какие противоречия ты нашёл в источниках информации.
28h DWord Entry point RVA Адрес относительно ImageBase, по которому передается управление при запуске программы или адрес инициализации/завершения библиотеки, т.н. точка входа на файл показывает 4096 а фактические 1536
подозреваю, что ошибка в получении этих 28 байт. Скорее всего, не от того места взял смещение 28, потому и получил левую точку входа
model small stack 256 dataseg lin dw 512 seek_code dd 0 seek_pe dw 0 handle dw 0 text_program db '===============',0Ah,0Dh db '= info.EXE.PE.v0.1 =',0Ah,0Dh db '===============',0Ah,0Dh,'$' text db 0Ah,0Dh,'$' buf db 512 dup (?) codeseg .386 start: push ds pop ax cmp byte ptr ds:[80h],0 je exit mov cx,260 mov al,0Dh mov di,82h cld repnz scasb dec di mov byte ptr [di],0 open: mov ax,3d00h mov dx,82h int 21h jc exit push ax read: mov ax,@data mov ds,ax pop ax mov [handle],ax mov ah,3fh mov bx,[handle] mov cx,lin mov dx,offset buf int 21h jc close close: mov ah,3eh mov bx,[handle] int 21h jc exit mov ah,09h mov dx,offset text_program int 21h mov si,offset buf mov ax,[si] cmp ax,'ZM' jne exit mov ax,[si+3ch] mov [seek_pe],ax call num_ mov si,offset buf add si,[seek_pe] add si,28h ;вот смещение в заголовке ;Адрес относительно ImageBase, по которому передается управление при запуске ;программы или адрес инициализации/завершения библиотеки, т.н. точка входа mov eax,dword ptr[si] call num ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exit: mov ax,4c00h int 21h num: include 32num.asm mov ah,09h mov dx,offset text int 21h ret num_: include num16.asm mov ah,09h mov dx,offset text int 21h ret end start
посмотрел участок кода под отладчиком, потом нашел этот участок кода по этому смещению относительно начала файла
test896 Вам верно сказал Freeman - вы смотрите под отладчиком образ в памяти, в нём секции выравнены на границу страницы - OptionalHeader.SectionAlignment. На диске в файле секции выравнены на OptionalHeader.FileAlignment, соответственно необходимо пересчитывать.
Привет всем! Немного разобрался... Вообщем заголовок имеет длину, в конце есть секции. ищем секцию кода , а там ----- по физическое смещение относительно начала EXE файла, выровнено на границу File align поля заголовка PE Header. Смещение используется загрузчиком как seek значение. кто еще знает как еще можно? Или метод один?