Макрос в фасме (implib)

Тема в разделе "WASM.PROJECTS", создана пользователем Quantum, 2 ноя 2006.

  1. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Нормально качается.

    Quantum
    А почему такой код странный для даты/времени? Слишком громоздкий. Здесь вроде попроще.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    dead_body
    качай аттач FlashGet'ом
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    IceStudent
    Тот код по ссылке разбивает timestamp на составляющие, типа DD/MM/YY и т.п. Мне нужно было просто сконвертировать timestamp в строку, как в макросе display_num, который ещё более громоздкий.

    dead_body
    OK, в следующий раз запакую зипом.
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Выкладываю версию 1.1:

    Добавил сортировку имён символов для совместимости со старыми версиями link.exe и полной совместимости со стандартом.
    Разделил __IMPORT_DESCRIPTOR_xxx и _xxx_NULL_THUNK_DATA на 2 разных обьектника чтобы не выскакивал варнинг в случае, если попадаются 2+ разные версии либы импорта для одной и тойже dll.
    Пофиксил несколько багов в предыдущей версии.

    TODO:
    Пофиксить /OPT:NOREF

    ЗЫ: Макрос использует директиву break, которая не доступна в старых версиях фасма.
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    v1.2:

    Пофиксил /OPT:NOREF - теперь линкуется и без этой опции.

    Добавил символы типа jmp [name] для любителей call [jmp <name>]. Почему-то IDA Pro теперь отказывается открывать lib-файл с этими символами, но Link и Polink абсолютно не жалуются.

    Добавил 2 ключа:

    USE_OPTIONAL_HEADER - включает в дескриптор импорта каждой директории optional header. Все новые версии линкеров игнорируют этот заголовок в обьектных файлах, но, кажется, очень старые версии MS LINK этот заголовок использовали для каких-то целей, т.к. он имеется в некоторых старых масмовских либах.

    USE_COMPID - MS LINK (link.exe и lib.exe) включают в каждый обьектник @comp.id. Если по какой-то причине Вы хотите чтобы implib генерировал эти compid'ы включите данную опцию.
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    v1.3:

    Пофиксил глюки, из-за которых IDA ругалась.

    Добавил возможность опционально задавать имена переходников (thunk) и публичных символов раздельно (у макроса появился ещё один опциональный аргумент).

    Имена переходников теперь тоже индексируются и сортируются для совместимости со старыми версиями MS LINK.

    Добавил проверку на уникальность всех символов перед добавлением в либу.

    Добавил пример более полноценной в смысле количества символов либы - winmm. Кроме стандартных символов из масмовской версии winmm.lib, добавил юникодовые версии функций и некоторые недокументированные символы. При всём этом, размер либы получается меньше, чем той, что в масме ;)

    Вроде, реализовал уже всё, что хотел. Новая версия будет только если обнаружится какой-нибудь глюк.
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Посмотрел исходник - интересные решения. Понравилась memcpy :)
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    IceStudent
    Надо будет ещё оптимизировать эти макросы на скорость, а то при создании большой либы заметны тормоза. И ввести поддержку очень длинных имён dll... Но это всё на будущее.

    All
    Если найдёте баг, не забудьте сообщить ;)
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    v1.4

    [*] Пофиксил парочку мелких багов.
    [+] Добавил исходник либы OpenAL v1.0 и v1.1.

    И буквально на следующий же день - v1.5 :)

    [+] Добавил ещё несколько проверок ошибок в аргументах.
    [*] Кавычки больше не нужны во всех аргументах макроса во избежание путаницы.
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    v1.6
    [+] Добавил утиль DLL2DEF.
    [+] Добавил пример использования CDECL библиотеки напрямую из PureBasic.
    [+] Написал парочку туториалов (инглиш).

    Проект теперь хостится на сорсфорже: http://implib.sf.net
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    v1.7
    Код (Text):
    1. [+] Возможность создания либ без оригинальных санков.
    2. [+] Куча примеров обновлённых версий стандартных либ: kernel32,
    3.      user32, gdi32 и т.д. Основная польза от этих примеров - это
    4.      возможность создания безсанковых версий стандартных либ.
    5. [*] Пофиксил мелкий баг в dll2def.
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    v1.8
    Код (Text):
    1. [*] Исправил баг для совместимости с последними версиями LD.
    2. [*] Наконец перевёл документацию.
    implib.sf.net
     
  13. letika

    letika New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    28
    Quantum
    Почему-то не нравится вашему dll2def olydbg.exe.

    На первой секции (.text) спотыкается вот здесь:
    Код (Text):
    1.   /* Parse the Name Pointer RVA Table */
    2.   while(num_sections--){
    3.     /* Get the symbol's name */
    4.     if(SetFilePointer(hFile,psymbols_array,0,FILE_BEGIN) != psymbols_array) return ERR_BAD_FORMAT;
    5.     ReadFile(hFile,&i,4,&aux,0); // i - левое значение принимает
     
  14. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    letika
    а какое отношение ехе имеет к dll2def
     
  15. letika

    letika New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    28
    wsd
    А ехе не может иметь таблицы экспорта?
     
  16. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    letika
    стандартно нет
    но можно извратиться
     
  17. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    letika
    я почему то даже не пользовался dll2def, а сразу заюзал dumpbin+perl для генерации скрипта для implib для Olly
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    wsd
    Хм. А зачем извращаться-то? Любой РЕ файл может иметь экспорт, так же, как и импорт :) ntoskrnl, например.
     
  19. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    IceStudent
    виноват запарился
     
  20. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    letika
    Код dll2def писался на основании примера из MSDN :) В общем, я подозревал, что он далёк от эталлона безглючности. Надо будет пересмотреть исходник и пофиксить...