точка входа в код ? (PE)

Тема в разделе "WASM.BEGINNERS", создана пользователем test896, 23 апр 2009.

  1. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    Привет! всем!
    Как узнать точку входу в заголовке где начинается код ?
    в статьях запутался у меня в книге одно в статье инете другое
    подскажите ...
     
  2. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    test896
    А ты попробуй сам выяснить. Заодно узнаешь ещё много интересного)
     
  3. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    Phuntik !
    спасибо, копаю, только не понятно есть заголовок и еще опциональный заголовок
     
  4. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    IMAGE_NT_HEADERS::IMAGE_OPTIONAL_HEADER::AddressOfEntryPoint
    http://viewer.zoho.com/docs/ifcadv
     
  5. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    test896
    Один может взять CFF Explorer и открыть в нём какой-нибудь модуль. Можно будет видеть структуру заголовков "как есть".
     
  6. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Если ты запутался, значит, нечто изучаешь. (Наверное, формат PE-файла) Покажи, какие противоречия ты нашёл в источниках информации.
     
  7. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    28h DWord Entry point RVA
    Адрес относительно ImageBase, по которому передается управление при запуске
    программы или адрес инициализации/завершения библиотеки, т.н. точка входа

    на файл показывает 4096 а фактические 1536
     
  8. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    и что это значит?
     
  9. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    подозреваю, что ошибка в получении этих 28 байт. Скорее всего, не от того места взял смещение 28, потому и получил левую точку входа
     
  10. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    исходник нужен
     
  11. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    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
     
  12. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    скорее всего вы путаете VirtualOffset и FileOffset
     
  13. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Это... Цифра 1536 откуда взялась?
     
  14. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    посмотрел участок кода под отладчиком, потом нашел этот участок кода по этому смещению относительно начала файла
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    test896
    Вам верно сказал Freeman - вы смотрите под отладчиком образ в памяти, в нём секции выравнены на границу страницы - OptionalHeader.SectionAlignment. На диске в файле секции выравнены на OptionalHeader.FileAlignment, соответственно необходимо пересчитывать.
     
  16. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    Привет всем!
    Немного разобрался...
    Вообщем заголовок имеет длину, в конце есть секции.
    ищем секцию кода , а там ----- по физическое смещение относительно начала EXE файла, выровнено на границу File align поля
    заголовка PE Header. Смещение используется загрузчиком как seek значение.


    кто еще знает как еще можно?
    Или метод один?