Как использовать в ASM функции с пространством имен?

Тема в разделе "WASM.BEGINNERS", создана пользователем Dilettante, 13 окт 2020.

  1. Dilettante

    Dilettante New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2019
    Сообщения:
    4
    Встречаю не первый раз dll в которых помимио нормальных функций присутствуют функции у которых длинные составные имена, я только могу предположить что это что то типа пространства имен. Как использовать в ASM такие функции?
    Код (Text):
    1. ??0PxRigidActorGeneratedInfo@physx@@QEAA@XZ
    2. ??0PxRigidActorGeneratedValues@physx@@QEAA@PEBVPxRigidActor@1@@Z
    3. ??0PxRigidBodyGeneratedInfo@physx@@QEAA@XZ
    4. ??0PxRigidBodyGeneratedValues@physx@@QEAA@PEBVPxRigidBody@1@@Z
    5. ??0PxRigidDynamicGeneratedInfo@physx@@QEAA@XZ
    6. ??0PxRigidDynamicGeneratedValues@physx@@QEAA@PEBVPxRigidDynamic@1@@Z
    7. ??0PxRigidStaticGeneratedInfo@physx@@QEAA@XZ
    8. ??0PxRigidStaticGeneratedValues@physx@@QEAA@PEBVPxRigidStatic@1@@Z
    Как в FASM импортировать такие функции в свою программу?
     
    Последнее редактирование: 13 окт 2020
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Это манглинг имен С++. https://en.wikipedia.org/wiki/Name_mangling

    Так а просто внешнюю функцию объявить с таким именем не работает? И потом надо иметь ввиду, что функции С++ могут выбрасывать исключения (в этой ситуации ты должен будешь их как-то обработать в ассемблере), и то, что this указатель вроде через ecx/rcx передается, если ничего не путаю.
     
  3. Dilettante

    Dilettante New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2019
    Сообщения:
    4
    Спасибо.
    Т.е. вот прям так делать таблицу импорта с таким уродским именем?
    Код (ASM):
    1. namedll,\
    2.     PxRigidActorGeneratedInfo, '??0PxRigidActorGeneratedInfo@physx@@QEAA@XZ'
    А про исключения, в какую сторону копать? SEH ?
     
  4. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Да.

    Если 32 бита то да.
     
  5. Dilettante

    Dilettante New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2019
    Сообщения:
    4
    А если 64 ?
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Если библиотека скомпилирована с помощью MinGW, то там несколько вариантов: sjlj, dwarf или seh.
     
  7. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Смотри IMAGE_DIRECTORY_ENTRY_EXCEPTION. Вот тут подробно описано как в MASM делать.