экспорт функций из DLL в fasm

Тема в разделе "WASM.WIN32", создана пользователем zStorm, 9 фев 2006.

  1. zStorm

    zStorm New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    44
    Адрес:
    Ukraine
    Есть ли какие-то ограничения на функции, експортируемые из DLL? Имеетьса следующая функция в исходнике DLL'ки:



    proc MyFunc p1,p2



    .if [p1]==NULL or [p2]==NULL

    ret

    .endif



    ;

    ;Некоторый код...

    ;



    ret

    endp



    Она должна експортироватьса. Если ее убрать из таблицы експорта, то все компилитьса нормально. Но если только вписать ее в таблицу:



    section '.edata' export data readable



    export 'PAL.dll',\

    MyFunc,'MyFunc'



    То компилер скажет:



    Illegal Instruction

    .if[..arg?0000671]==NULL or[..arg?000066D]==NULL



    показывая на .if [p1]==NULL or [p2]==NULL, типа недопустимая инструкция. Может кто-то подскажет в чем проблема?



    P.S.:lol: LL создаетьса в фасме, если кто по исходнику не определил :)

    P.P.S.:На цифры 0000671 и 000066D не обращайте внимания-в настоящей программе параметров передаетьса больше и в другом порядке.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    фасм разве уже поддерживает несколько условий в одной строке .if ?
     
  3. zStorm

    zStorm New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    44
    Адрес:
    Ukraine
    Ага. Поддерживает. Даже компилит. Если функцию не експортировать. А если експортировать, то даже такой код не работает:

    mov eax,p1
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Если не экспортировать, то он её и обрабатывать не будет, соотв. ошибок тебе не напишет :)
     
  5. Privalov

    Privalov New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2004
    Сообщения:
    16
    Вместо:

    .if [p1]==NULL or [p2]==NULL

    нужно быть:

    .if [p1]=NULL | [p2]=NULL



    А вместо:

    mov eax,p1

    нужно быть:

    lea eax,[p1]

    (потому что [p1]=[ebp+8])



    proc есть ассемблирован толко если нужен - если он не экспортирован, он не нужен и ассемблер пропускает его.



    PS. Извините, мой русский язык плохый.
     
  6. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    A kto to jest? Pan Privalov! Dzien dobry :)

    Рад тебя видеть здесь :)Мой польский не лучше :))
     
  7. zStorm

    zStorm New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    44
    Адрес:
    Ukraine
    Спасибо за ответы. Да-а, не ожидал такого хода от фасма :) Удар сзади. 8)