Какие минимальные требования к файлу, в котором определена функция?

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

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Имеется ввиду MASM32

    ...Друзья! Вот здесь вот описание процедуры ValidPE, которая проверяет PE файл на правильность.
    http://www.wasm.ru/article.php?article=green2red01

    Тело процедуры пока не важно, и если его откинуть, то остаются две строки. Вот они
    Код (Text):
    1. ValidPE proc
    2. ValidPE endp
    То есть по приведённой выше ссылке нет ни списка подключаемых файлов, ни библиотек, ни прототипа функции, ничего. Только начало, конец и тело функции. Я эту функцию (пока имеется ввиду "сокращёный" вариант) оформляю отдельным файлом fail_ValidPE.asm, в который помещаются две эти строчки. И всё. Потом пишу тело основной программы (файл osnovn_fail.asm) из которой вызывается функция ValidPE. Вот текст этой программы

    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\kernel32.lib
    8. include \masm32\bin\fail_ValidPE.asm
    9.  
    10. ValidPE proto
    11.  
    12. .code
    13. start:
    14. invoke ValidPE
    15.       invoke ExitProcess, 0
    16. end start
    И пытаюсь получить объектный файл командой ml /c /coff osnovn_fail.asm Ничего не получается. Ошибки в файле fail_ValidPE.asm, в первой и второй строчках. А чтобы оформить эту функцию отельным файлом, нужно как минимум такой текст (я его, каюсь, получил опытным путём, отбрасывая всё лишнее, а нигде не прочёл, как надо.)

    Код (Text):
    1. .386
    2. .model flat, stdcall
    3.  
    4. .code
    5. start:
    6.  
    7. ValidPE proc
    8. ValidPE endp
    9.  
    10. end start
    Теперь собственно, вопрос- правилен ли предыдущий текст? Может, действительно, достаточно первых двух строчек+тело функции (см. начало вопроса). И вызвать функцию каким-то "хитрым " способом, которого я пока не знаю?
    ...Ну, а если использовать, более сложную функцию (ValidPE), то, понятно, необходимо и заголовочные файлы подключить и библиотеку... Но автор статьи, указанной по ссылке обходится без них! Или просто он не упоминает об этом, надеясь на более продвинутого программиста, нежели я? Дескать, раз дошёл до такого, сообразишь и сам. Ну, я сомневаюсь в правильности своих действий.
    ...Думаю, работа, проведённая мной, не покажет в моём лице лентяя, не хотящего юзать Google. Да, честно говоря, мне кажется, я нашёл правильный ответ, от вас хочу услышать лишь подтверждение. Спасибо.
     
  2. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    amvoz Из всего, что ты написал, оставь только .code
     
  3. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Содержание файла ValidPE.asm
    Код (Text):
    1. .code
    2. ValidPE proc
    3. ValidPE endp
    Команда ml /c /coff ValidPE.asm

    ValidPE.asm(1) : error A2013: .MODEL must precede this directive
    ValidPE.asm(2) : error A2034: must be in segment block : ValidPE
    ValidPE.asm(3) : fatal error A1010: unmatched block nesting : ValidPE

    ...Так что одного .code, по всей видимости, маловато будет...
     
  4. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    amvoz Дык эта... Я думал ты его инклудишь в основной. Ты уж поконкретнее вопросы задавай чтоле. А то тебе, то секцию переместить то какие-то требования к файлу. )))
    Чтобы заинклудить файл, в котором описана процедура, то достаточно прописать сверху директиву компилятора .code, после которой пойдет тело функции.
    А если ты собираешься собрать объектник отдельно, то уж тут по всем правилам, как и основной файл.

    [add] У тя же в заголовке прописано include \masm32\bin\fail_ValidPE.asm

    Так что ж ты в итоге хочешь получить-то? Объектник отдельно или правильно заинклудить???
     
  5. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Чёрт его знает, что я хотел. Судя по всему заинклудить, коль скоро прописывал
    include \masm32\bin\fail_ValidPE.asm
    и пытался функцию вызвать из другого подключаемого файла.
    ...Да, так. Я пытался заинклудить, но неправильно.

    Ну, я сейчас благодяря тебе, оба способа знаю, опробировал, нормально работают. Сейчас помечу себе где-нибудь на бумажке. В С как-то пороще был с этим, что ли... Спасибо. До свидания.
    ...Беда в том, что я не подоходил к теме "объектные файлы" *.asm (*.cpp, *.c, *.pas) и сразу *.exe