проблема при создании PE файла.

Тема в разделе "WASM.ASSEMBLER", создана пользователем abcd008, 15 мар 2011.

  1. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    скачал последнюю версию fasm 1.69 и обнаружил что все pe файлы он делает с не правильным выравниванием.
    например в старой версии fasm 1.67 мой файл получался 2048 а в новой 1536 байт(и перестал выполняться, выдает ошибку)
    я сначала думал что я что-то делаю не так. но потом опять взял старый fasm и все заработало.

    что надо сделать чтоб новая версия делала правильные файлы? может какой параметр передать надо или еще что?
     
  2. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    А «неправильное» выравнивание – это сколько, и по чьей версии? И минимальный пример неплохо было бы.
     
  3. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    я сравнил оба файла и выяснил что в новой версии fasm при компиляции не заполняет раздел reloc(pe файла)
    отсюда и меньший размер, и ошибки видимо тоже.
    как исправить не знаю(
     
  4. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    интересно убрал из исходника
    section '.reloc' fixups data discardable

    и все заработало.

    вот только интересно, почему тогда предыдуший fasm все делал, и все работало?
    ведь этот reloc нужен иногда, и не зря же он в исходнике стоял.
    я думаю если я напишу более сложную программу, не будет ли ошибок без раздела reloc?
     
  5. solvitz

    solvitz Member

    Публикаций:
    0
    Регистрация:
    28 авг 2010
    Сообщения:
    86
    Ты DLL компилировал или EXE?
     
  6. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    это:
    format pe64 dll efi
    entry main

    section '.text' code executable readable

    include 'efi.inc'

    main:
    sub rsp, 4*8 ; reserve space for 4 arguments

    mov [Handle], rcx ; ImageHandle
    mov [SystemTable], rdx ; pointer to SystemTable

    lea rdx, [_hello]
    mov rcx, [SystemTable]
    mov rcx, [rcx + EFI_SYSTEM_TABLE.ConOut]
    call [rcx + SIMPLE_TEXT_OUTPUT_INTERFACE.OutputString]

    add rsp, 4*8
    mov eax, EFI_SUCCESS
    retn


    section '.data' data readable writeable

    Handle dq ?
    SystemTable dq ?
    _hello du 'Hello World',13,10
    db 10h,0,11h,0,0,0

    section '.reloc' fixups data discardable