Всем привет. Вот смотрю исходники свежевыложеного буткита BlackLotus, проект x64 сделан в студии 2015, но в ф-иях присутвтуют ассемблерные вставки. Но как все знают что не поддерживаются они компилятором! Как они его собирали? Толи я чего то не понимаю)) Может есть какой то лайфхак как заставить студию их хавать?))
выбросить в топку Код (Text): if (Is64Bit()) { _InterlockedCompareExchange64((LONGLONG *)Destination, *(LONGLONG*)Buffer, *(LONGLONG *)Destination); return; } // тут ветка только для 32 бит кода! -> фтопку........ __asm { lea esi, Buffer; mov edi, Destination; mov eax, [edi]; mov edx, [edi + 4]; mov ebx, [esi]; mov ecx, [esi + 4]; lock cmpxchg8b[edi]; }
Код (Text): //implement heavens gate to handle x86<->x64 dynamic function resolving HMODULE GetModuleHandleByHash(DWORD Hash) { LDR_MODULE* Module = NULL; DWORD CurrentHash; DWORD Length; _asm { MOV EAX, FS:[0x18]; MOV EAX, [EAX + 0x30]; MOV EAX, [EAX + 0x0C]; MOV EAX, [EAX + 0x0C]; MOV Module, EAX; } while (Module->BaseAddress) { LPWSTR LowerCase = StringToLowerW(Module->BaseDllName.Buffer, Module->BaseDllName.Length); Length = StringLengthW(LowerCase) * 2; CurrentHash = Crc32Hash(LowerCase, Length); if (CurrentHash == Hash) { return (HMODULE)Module->BaseAddress; } Module = (PLDR_MODULE)(struct ModuleInfoNode*)Module->InLoadOrderModuleList.Flink; } return (HMODULE)NULL; } По твоему 64-разрядной сборки небыло?
Это 32-битный код. И потом, и clang, и тем более mingw умеют в асм вставки, зачем cl использовать, если нужны асм вставки?