call x вместо call [x]

Тема в разделе "WASM.WIN32", создана пользователем sn0w, 18 янв 2019.

  1. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    пилю софт на LLVM. нарвался на баг, сперва думал что гдето в компилере накосячил, однако нет - скачал с офсайт LLVM x86 clang дистр. подрубил компилер оттуда - тоже самое. линкую линкером от 2017 студии.
    суть вот в чём:

    Код (Text):
    1.  
    2. 0040106d 894c2404  mov  dword ptr [esp+4],ecx
    3. 00401071 c744240800000000 mov  dword ptr [esp+8],0
    4. 00401079 c744240c00000000 mov  dword ptr [esp+0Ch],0
    5. 00401081 8985f4fbffff  mov  dword ptr [ebp-40Ch],eax
    6. 00401087 e87c0f0000  call  loader_obj!_imp__MessageBoxW (00402008) ; <-------
    7.  
    а это у нас IAT:
    Код (Text):
    1.  
    2. 0:000> dps 402000 l4
    3. 00402000  76f347a0 KERNEL32!ExitProcessImplementation
    4. 00402004  00000000
    5. 00402008  757c23a0 USER32!MessageBoxW
    6. 0040200c  00000000
    7.  
    т.е. прыгает на данные.
    и так со всеми статическими импортами, шозанах?

    я по идее на jmp-стаб должен попадать хотябы
     
    Последнее редактирование: 18 янв 2019
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    а что в LLVM IR, с которого он это компилит?
     
    sn0w нравится это.
  3. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    сейчас не могу сказать - нет тачки под рукой. но видать гдето чтото в параметрах закралось, ибо и кастомной и релизной сборкой компилил (clang-cl 123.cpp) - там и линк автоматом сразу, короче всё дефолтное, - так вот работает всё как надо без косяков, сдампил параметры, вот терь надо разбираться, про ir чёто не подумал сразу :/
     
  4. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    пофиксил. были там нюансы между драйвером и самим конпилером
     
  5. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    вообщем разобрался. получилась такая хрень:
    clang -O0 -S -mllvm -x86-asm-syntax=intel -o loader.s loader.cpp
    clang -cc1as -filetype obj -o loader.cpp.obj loader.s

    и не работает, генерит E8 в месте вызова апи

    а так:
    clang -O0 -S -o loader.s loader.cpp
    clang -cc1as -filetype obj -o loader.cpp.obj loader.s

    работает. FF 25, как надо.

    насколько я понимаю - неправильно парсится асм листинг, криво читает интеловский синтаксис, с атт всё ок
     
    UbIvItS нравится это.