#define CS_BOTS 0xE8, '*', '*', '*', '*'
#ifdef WIN32
#define CS_BOTS_W CS_BOTS, 0x83, 0xC4, 0x04, 0x84, 0xC0, '*', '*', '*', '*', '*', '*'
unsigned char CS_BOTS_RADIO[]{ CS_BOTS_W, '*', '*', 0xE8, '*', '*', '*', '*', 0x83, }; // phraseMan
unsigned char CS_BOTS_PROFILES[]{ CS_BOTS_W, 0x57, 0x68, '*', '*', '*', '*', 0xE8, '*', '*', '*', '*', 0xE9, };
unsigned char CS_BOTS_CON_VARS[]{ CS_BOTS_W, 0x68, '*', '*', '*', '*', 0xFF, '*', '*', '*', '*', '*', 0x68, '*', '*', '*', '*', 0xFF, };
unsigned char CS_BOTS_CON_CMDS_REG[]{ CS_BOTS_W, 0x8B, '*', 0x8B, '*', 0x68, '*', '*', '*', '*', 0xFF, '*', '*', 0x8B, '*', 0x8B, '*', 0x68, };
unsigned char CS_BOTS_CON_CMDS_EXEC[]{ CS_BOTS_W, 0x56, 0x8B, '*', '*', 0xB9, '*', '*', '*', '*', 0x8B, '*', 0x0F, };
unsigned char CS_BOTS_MAP_NAV[]{ CS_BOTS_W, 0xC6, '*', '*', '*', '*', '*', '*', 0xE8, '*', '*', '*', '*', 0x85, '*', 0x74, '*', 0x68, };
unsigned char CS_BOTS_MANAGER[]{ CS_BOTS_W, '*', '*', 0x83, '*', '*', 0x75, '*', 0x8B, '*', '*', '*', '*', '*', 0x68, '*', '*', '*', '*', 0xFF, }; // addBot
unsigned char CS_BOTS_DISPLAY[]{ CS_BOTS, 0x83, '*', '*', 0x80, '*', '*', '*', 0x74, '*', 0x8B, '*', '*', 0xFF, '*', '*', '*', '*', '*', 0x6A, '*', 0x6A, '*', 0x6A, '*', 0xFF, '*', '*', '*', '*', '*', 0x6A, '*', 0xFF, }; // clientPrint #Game_radio_loc...
#else
#define CS_BOTS_L CS_BOTS, 0x83, 0xC4, 0x10, 0x84, 0xC0, '*', '*', '*', '*', '*', '*'
unsigned char CS_BOTS_RADIO[]{ CS_BOTS_L, 0x83, '*', '*', 0xFF, '*', '*', '*', '*', '*', 0x68, '*', '*', '*', '*', 0xE8, '*', '*', '*', '*', 0x83, '*', '*', 0x31, '*', 0xE9, }; // phraseMan
unsigned char CS_BOTS_PROFILES[]{ CS_BOTS, 0x84, '*', 0x0F, '*', '*', '*', '*', '*', 0x8B, '*', '*', '*', 0xC7, '*', '*', '*', '*', '*', '*', 0x89, '*', '*', '*', 0xE8, '*', '*', '*', '*', 0xE9, };
unsigned char CS_BOTS_CON_VARS[]{ CS_BOTS_L, 0x83, '*', '*', 0x68, '*', '*', '*', '*', 0xFF, '*', '*', '*', '*', '*', 0xC7, '*', '*', '*', '*', '*', '*', 0xFF, };
unsigned char CS_BOTS_CON_CMDS_REG[]{ CS_BOTS_L, '*', 0x68, '*', '*', '*', '*', 0x53, 0xFF, '*', '*', 0x58, 0x8B, '*', 0x5A, 0x68, '*', '*', '*', '*', 0x53, 0xFF, '*', '*', 0x59, 0x58, 0x8B, };
unsigned char CS_BOTS_CON_CMDS_EXEC[]{ CS_BOTS_L, '*', '*', 0xBF, '*', '*', '*', '*', 0xB9, '*', '*', '*', '*', 0xF3, '*', 0x0F, '*', '*', '*', '*', '*', 0x8B, '*', '*', '*', '*', '*', 0xBF, };
unsigned char CS_BOTS_MAP_NAV[]{ CS_BOTS_L, '*', '*', '*', 0xE8, '*', '*', '*', '*', 0x85, '*', 0x0F, '*', '*', '*', '*', '*', 0x83, '*', '*', 0x68, '*', '*', '*', '*', 0xE8, '*', '*', '*', '*', 0xA1, };
unsigned char CS_BOTS_MANAGER[]{ CS_BOTS_L, 0x83, '*', '*', 0x89, '*', 0x8B, '*', '*', '*', '*', '*', 0x0F, '*', '*', '*', '*', '*', 0x85, '*', 0x0F, '*', '*', '*', '*', '*', 0x83, '*', '*', 0x0F, }; // addBot
unsigned char CS_BOTS_DISPLAY[]{ CS_BOTS, 0x80, '*', '*', '*', '*', 0x0F, '*', '*', '*', '*', '*', 0x8B, '*', '*', 0x31, '*', 0xBB, '*', '*', '*', '*', 0x8B, '*', '*', '*', '*', '*', 0x89, '*', '*', '*', 0x89, }; // clientPrint #Game_radio_loc...
#endif
Wasn't able to test the Linux signatures. EDIT: Tested, working.
#define CS_BOTS 0xE8, '*', '*', '*', '*'
#ifdef WIN32
#define CS_BOTS_W CS_BOTS, 0x83, 0xC4, 0x04, 0x84, 0xC0, '*', '*', '*', '*', '*', '*'
unsigned char CS_BOTS_RADIO[]{ CS_BOTS_W, '*', '*', 0xE8, '*', '*', '*', '*', 0x83, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `int __cdecl BotPhraseManager::Initialize (BotPhraseManager * this, char * a2, int a3)` ( LINUX )
unsigned char CS_BOTS_PROFILES[]{ CS_BOTS_W, 0x57, 0x68, '*', '*', '*', '*', 0xE8, '*', '*', '*', '*', 0xE9, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `void __cdecl BotProfileManager::Init (BotProfileManager * const this, char * filename, unsigned int * checksum)` ( LINUX )
unsigned char CS_BOTS_CON_VARS[]{ CS_BOTS_W, 0x68, '*', '*', '*', '*', 0xFF, '*', '*', '*', '*', '*', 0x68, '*', '*', '*', '*', 0xFF, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `void Bot_RegisterCvars (void)` ( LINUX )
unsigned char CS_BOTS_CON_CMDS_REG[]{ CS_BOTS_W, 0x8B, '*', 0x8B, '*', 0x68, '*', '*', '*', '*', 0xFF, '*', '*', 0x8B, '*', 0x8B, '*', 0x68, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `void __cdecl CCSBotManager::AddServerCommands (CCSBotManager * this)` ( LINUX )
unsigned char CS_BOTS_CON_CMDS_EXEC[]{ CS_BOTS_W, 0x56, 0x8B, '*', '*', 0xB9, '*', '*', '*', '*', 0x8B, '*', 0x0F, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `unsigned int __cdecl CCSBotManager::ServerCommand (CCSBotManager * this, const char * a2)` ( LINUX )
unsigned char CS_BOTS_MAP_NAV[]{ CS_BOTS_W, 0xC6, '*', '*', '*', '*', '*', '*', 0xE8, '*', '*', '*', '*', 0x85, '*', 0x74, '*', 0x68, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `void __cdecl CCSBotManager::ValidateMapData (CCSBotManager * this)` ( LINUX )
unsigned char CS_BOTS_MANAGER[]{ CS_BOTS_W, '*', '*', 0x83, '*', '*', 0x75, '*', 0x8B, '*', '*', '*', '*', '*', 0x68, '*', '*', '*', '*', 0xFF, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `int __usercall CCSBotManager::AddBot @ <eax> (int a1 @ <edi>, BotProfile * this, const BotProfile * a3)` ( LINUX )
unsigned char CS_BOTS_DISPLAY[]{ CS_BOTS, 0x83, '*', '*', 0x80, '*', '*', '*', 0x74, '*', 0x8B, '*', '*', 0xFF, '*', '*', '*', '*', '*', 0x6A, '*', 0x6A, '*', 0x6A, '*', 0xFF, '*', '*', '*', '*', '*', 0x6A, '*', 0xFF, }; /// `void __cdecl ClientPrint (entvars_t * client, int msg_dest, const char * msg_name, const char * param1, const char * param2, const char * param3, const char * param4)` CALL WITH "#Game_radio_location" PARAMETER INSIDE FUNCTION `void __cdecl CBasePlayer::Radio (CBasePlayer * const this, const char * msg_id, const char * msg_verbose, __int16 pitch, bool showIcon)` ( LINUX )
unsigned char CS_BOTS_HOSTAGE[]{ 0x55, 0x8B, '*', 0x6A, '*', 0x68, '*', '*', '*', '*', 0x64, '*', '*', '*', '*', '*', 0x50, 0x83, '*', '*', 0x53, 0x56, 0x57, 0xA1, '*', '*', '*', '*', 0x33, '*', 0x50, 0x8D, '*', '*', /// `void __thiscall CHostage::IdleThink (CHostage * this)` FUNCTION ( WINDOWS )
0x64, '*', '*', '*', '*', '*', 0x8B, '*', 0x83, '*', '*', '*', '*', '*', '*', 0x8B, '*', '*', '*', '*', '*', 0x75, '*', 0x85, '*', 0x74, '*', 0x8B, '*', 0x6A, '*', 0xFF, }; /// `void __cdecl CHostage::IdleThink (CHostage * const this)` FUNCTION ( LINUX )
unsigned char CS_BOTS_IMPROV[]{ 0x53, 0x8B, '*', 0x83, '*', '*', 0x83, '*', '*', 0x83, '*', '*', 0x55, 0x8B, '*', '*', 0x89, '*', '*', '*', 0x8B, '*', 0x6A, '*', 0x68, '*', '*', '*', '*', 0x64, '*', '*', '*', '*', '*', /// `int * __userpurge sub_1004DBB0 @ <eax> (int * a1 @ <ecx>, int a2 @ <edi>, int a3 @ <esi>, int a4)` FUNCTION ( WINDOWS )
0x50, 0x53, 0x83, '*', '*', 0x56, 0x57, 0xA1, '*', '*', '*', '*', 0x33, '*', 0x50, 0x8D, '*', '*', 0x64, '*', '*', '*', '*', '*', 0x8B, '*', 0x89, '*', '*', 0xC7, }; /// `void __cdecl CHostageImprov::CHostageImprov (CHostageImprov * const this, CHostage * entity)` FUNCTION ( LINUX )
unsigned char CS_BOTS_NEW[]{ CS_BOTS, 0x83, '*', '*', 0x89, '*', '*', 0xC7, '*', '*', '*', '*', '*', '*', 0x85, '*', 0x74, '*', 0x57, 0x8B, '*', 0xE8, '*', '*', '*', '*', 0xEB, }; /// `void * __cdecl operator new (unsigned size)` CALL INSIDE FUNCTION `void __cdecl CHostage::IdleThink (CHostage * const this)` ( LINUX )
#else
#define CS_BOTS_L CS_BOTS, 0x83, 0xC4, 0x10, 0x84, 0xC0, '*', '*', '*', '*', '*', '*'
unsigned char CS_BOTS_RADIO[]{ CS_BOTS_L, 0x83, '*', '*', 0xFF, '*', '*', '*', '*', '*', 0x68, '*', '*', '*', '*', 0xE8, '*', '*', '*', '*', 0x83, '*', '*', 0x31, '*', 0xE9, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `int __cdecl BotPhraseManager::Initialize (BotPhraseManager * this, char * a2, int a3)` ( LINUX )
unsigned char CS_BOTS_PROFILES[]{ CS_BOTS, 0x84, '*', 0x0F, '*', '*', '*', '*', '*', 0x8B, '*', '*', '*', 0xC7, '*', '*', '*', '*', '*', '*', 0x89, '*', '*', '*', 0xE8, '*', '*', '*', '*', 0xE9, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `void __cdecl BotProfileManager::Init (BotProfileManager * const this, char * filename, unsigned int * checksum)` ( LINUX )
unsigned char CS_BOTS_CON_VARS[]{ CS_BOTS_L, 0x83, '*', '*', 0x68, '*', '*', '*', '*', 0xFF, '*', '*', '*', '*', '*', 0xC7, '*', '*', '*', '*', '*', '*', 0xFF, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `void Bot_RegisterCvars (void)` ( LINUX )
unsigned char CS_BOTS_CON_CMDS_REG[]{ CS_BOTS_L, '*', 0x68, '*', '*', '*', '*', 0x53, 0xFF, '*', '*', 0x58, 0x8B, '*', 0x5A, 0x68, '*', '*', '*', '*', 0x53, 0xFF, '*', '*', 0x59, 0x58, 0x8B, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `void __cdecl CCSBotManager::AddServerCommands (CCSBotManager * this)` ( LINUX )
unsigned char CS_BOTS_CON_CMDS_EXEC[]{ CS_BOTS_L, '*', '*', 0xBF, '*', '*', '*', '*', 0xB9, '*', '*', '*', '*', 0xF3, '*', 0x0F, '*', '*', '*', '*', '*', 0x8B, '*', '*', '*', '*', '*', 0xBF, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `unsigned int __cdecl CCSBotManager::ServerCommand (CCSBotManager * this, const char * a2)` ( LINUX )
unsigned char CS_BOTS_MAP_NAV[]{ CS_BOTS_L, '*', '*', '*', 0xE8, '*', '*', '*', '*', 0x85, '*', 0x0F, '*', '*', '*', '*', '*', 0x83, '*', '*', 0x68, '*', '*', '*', '*', 0xE8, '*', '*', '*', '*', 0xA1, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `void __cdecl CCSBotManager::ValidateMapData (CCSBotManager * this)` ( LINUX )
unsigned char CS_BOTS_MANAGER[]{ CS_BOTS_L, 0x83, '*', '*', 0x89, '*', 0x8B, '*', '*', '*', '*', '*', 0x0F, '*', '*', '*', '*', '*', 0x85, '*', 0x0F, '*', '*', '*', '*', '*', 0x83, '*', '*', 0x0F, }; /// `int __cdecl UTIL_IsGame (const char * gameName)` CALL INSIDE FUNCTION `int __usercall CCSBotManager::AddBot @ <eax> (int a1 @ <edi>, BotProfile * this, const BotProfile * a3)` ( LINUX )
unsigned char CS_BOTS_DISPLAY[]{ CS_BOTS, 0x80, '*', '*', '*', '*', 0x0F, '*', '*', '*', '*', '*', 0x8B, '*', '*', 0x31, '*', 0xBB, '*', '*', '*', '*', 0x8B, '*', '*', '*', '*', '*', 0x89, '*', '*', '*', 0x89, }; /// `void __cdecl ClientPrint (entvars_t * client, int msg_dest, const char * msg_name, const char * param1, const char * param2, const char * param3, const char * param4)` CALL WITH "#Game_radio_location" PARAMETER INSIDE FUNCTION `void __cdecl CBasePlayer::Radio (CBasePlayer * const this, const char * msg_id, const char * msg_verbose, __int16 pitch, bool showIcon)` ( LINUX )
unsigned char CS_BOTS_HOSTAGE[]{ 0x57, 0x56, 0x53, 0x83, '*', '*', 0x81, '*', '*', '*', '*', '*', '*', '*', '*', '*', 0x8B, '*', '*', '*', 0x0F, '*', '*', '*', '*', '*', 0x8B, '*', '*', '*', '*', '*', 0x85, '*', 0x0F, }; /// `void __cdecl CHostage::IdleThink (CHostage * const this)` FUNCTION ( LINUX )
unsigned char CS_BOTS_IMPROV[]{ 0x57, 0x31, '*', 0x66, '*', '*', '*', 0x56, 0xBA, '*', '*', '*', '*', 0x53, 0xB9, '*', '*', '*', '*', 0x83, '*', '*', 0xBF, '*', '*', '*', '*', 0x8B, '*', '*', '*', 0x0F, '*', '*', '*', '*', /// `int * __userpurge sub_1004DBB0 @ <eax> (int * a1 @ <ecx>, int a2 @ <edi>, int a3 @ <esi>, int a4)` FUNCTION ( WINDOWS )
'*', '*', 0x8B, '*', '*', '*', 0x0F, '*', '*', '*', 0x0F, '*', '*', '*', 0xF3, '*', '*', '*', '*', '*', '*', '*', 0x89, '*', '*', '*', '*', '*', 0xB8, }; /// `void __cdecl CHostageImprov::CHostageImprov (CHostageImprov * const this, CHostage * entity)` FUNCTION ( LINUX )
unsigned char CS_BOTS_NEW[]{ CS_BOTS, 0x89, '*', '*', '*', 0x89, '*', '*', 0x89, '*', 0xE8, '*', '*', '*', '*', 0x89, '*', '*', '*', '*', '*', 0xE9, }; /// `void * __cdecl operator new (unsigned size)` CALL INSIDE FUNCTION `void __cdecl CHostage::IdleThink (CHostage * const this)` ( LINUX )
#endif