CODE-RIP: проблема с манглингом

Тема в разделе "WASM.RESEARCH", создана пользователем liss, 14 сен 2005.

  1. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    В общем решил я из чисто исследовательских соображений :derisive: срипать виндовский калькулятор, как описано в статье Broken Sword'а (CODE-RIP: искусство выдирания чужого кода - Часть I. Теория), сгенерил исходник calc.asm из бинарника calc.exe, юзаю ИДУ (следуя статье). Добился его компилябельности. И тут настал момент линковки, вылезли следующие ошибки:



    calc.obj : error LNK2001: unresolved external symbol _RegOpenKeyExA@20

    calc.obj : error LNK2001: unresolved external symbol _RegQueryValueExA@24

    ... и т.д.



    Зарезолвил ошибки, заменив в calc.asm все функции по следующей схеме:

    RegOpenKeyExA -> RegOpenKeyExA@20

    RegQueryValueExA -> RegQueryValueExA@24

    ... и т.д.

    большенство сообщений пропало! :)



    Остались сообщения, типа следующих:

    calc.obj : error LNK2001: unresolved external symbol ___imp_??3@YAXPAX@Z

    calc.obj : error LNK2001: unresolved external symbol ___imp_??1type_info@@UAE@XZ



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



    Спасибо!
     
  2. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    забыл сказать, юзаю для компиляции masm 8, линкер от туда же.
     
  3. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    включи demangled names -names , например



    это какие- то конструкторы , там надо будет trl подключать
     
  4. liss

    liss New Member

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


    Чем это поможет линкеру? Имена станут понятными мне, но не ему.





    что такое trl? Объясни плиз :)
     
  5. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    liss

    линкеру включать ничего не надо, все эти demangled нужно влкючить в самой IDA (сейчас нахожусь в селе и IDA под рукой нет), она поменяет все эти _??3@YAXPAX@Z на метки вида sub_xxxx и все будет компилиться.
     
  6. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    2Broken Sword



    Там есть такой код:



    ; void __cdecl operator delete(void *)

    ??3@YAXPAX@Z proc near ; CODE XREF: .text:0101269Cp

    ; .text:010126B4p

    jmp ds:__imp_??3@YAXPAX@Z ; __declspec(dllimport) operator delete(void *)

    ??3@YAXPAX@Z endp



    Переходник ??3@YAXPAX@Z юзаются в приложении, чтобы явно не вызывать __imp__??3@YAXPAX@Z.



    Откуда видно, что он передает управление в msvcrt.dll. Значит нужно импортировать? Или я что-то недопонимаю?



    Ты имел ввиду, что IDA автоматом переименовывает ??3@YAXPAX@Z в что-нибудь типа sub_xxxx?
     
  7. _staier

    _staier New Member

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

    меню options/demangled names





    2. trl это я не правильно написал

    run-time library (rtl)



    скорее всего без нормальной точки входа , где происходит инициализация rtl это работать не будет

    разве что сделать obj и прилинковать к программе на с++
     
  8. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Есть такая хорошая система ADAXX adaxx.narod.ru этот дизассемблер делает качественные ассемблируемые (МАСМ) листинги так что лучше его для таких целей использовать... проверено на 900кб ЕХЕшники который после дизассемблирования был успешно собран....



    инструкции и тд итп всё на сайте...
     
  9. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    2 Fallout

    Спасибо за совет, я попробую как-нибудь его.



    Но мне все-таки интересен вопрос КАК? буду копать...