пилю софт на LLVM. нарвался на баг, сперва думал что гдето в компилере накосячил, однако нет - скачал с офсайт LLVM x86 clang дистр. подрубил компилер оттуда - тоже самое. линкую линкером от 2017 студии. суть вот в чём: Код (Text): 0040106d 894c2404 mov dword ptr [esp+4],ecx 00401071 c744240800000000 mov dword ptr [esp+8],0 00401079 c744240c00000000 mov dword ptr [esp+0Ch],0 00401081 8985f4fbffff mov dword ptr [ebp-40Ch],eax 00401087 e87c0f0000 call loader_obj!_imp__MessageBoxW (00402008) ; <------- а это у нас IAT: Код (Text): 0:000> dps 402000 l4 00402000 76f347a0 KERNEL32!ExitProcessImplementation 00402004 00000000 00402008 757c23a0 USER32!MessageBoxW 0040200c 00000000 т.е. прыгает на данные. и так со всеми статическими импортами, шозанах? я по идее на jmp-стаб должен попадать хотябы
сейчас не могу сказать - нет тачки под рукой. но видать гдето чтото в параметрах закралось, ибо и кастомной и релизной сборкой компилил (clang-cl 123.cpp) - там и линк автоматом сразу, короче всё дефолтное, - так вот работает всё как надо без косяков, сдампил параметры, вот терь надо разбираться, про ir чёто не подумал сразу :/
вообщем разобрался. получилась такая хрень: 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, как надо. насколько я понимаю - неправильно парсится асм листинг, криво читает интеловский синтаксис, с атт всё ок