Хочу сделать макрос для шифрования кода, в который оборачивается нужный участок, и внутри макроса происходит расшифровка и шифрование. Но со вставками асмовых блоков возникли проблемы: Код (C++): #define CRYPT(BlockID, Code) \ PVOID StartAddress##BlockID, StopAddress##BlockID; \ __asm \ { \ mov StartAddress##BlockID, offset Start##BlockID \ mov StopAddress##BlockID, offset SigStop##BlockID \ } \ ULONG CodeSize##BlockID = (ULONG)StopAddress##BlockID - (ULONG)StartAddress##BlockID; \ RELOCS_INFO RelocsInfo##BlockID; \ InitializeRelocsInfo( \ GetModuleHandle(NULL), \ &RelocsInfo##BlockID \ ); \ EncryptDecrypt( \ StartAddress##BlockID, \ CodeSize##BlockID, \ &RelocsInfo##BlockID \ ); \ goto Start##BlockID; \ CRYPT_SIGNATURE_START; \ Start##BlockID: \ Code ; \ goto Stop##BlockID; \ SigStop##BlockID: \ CRYPT_SIGNATURE_STOP; \ Stop##BlockID: \ EncryptDecrypt( \ StartAddress##BlockID, \ CodeSize##BlockID, \ &RelocsInfo##BlockID \ ); Использую так: Код (C++): CRYPT(BLCK, DbgBreakPoint()); Ругается: Код (Text): 1> warning C4405: mov: идентификатор является зарезервированным словом 1> error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "второй операнд"; обнаружено "StopAddressBLCK" Как объявить макрос правильно?
Код (Text): => __asm mov StartAddress##BlockID, offset Start##BlockID \ __asm mov StopAddress##BlockID, offset SigStop##BlockID \ нельзя в строчку, по отдельности надо. а вообще, ключ /P открывает тайны препроцессора