рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рд░реИрдкрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ ( рдпрд╣рд╛рдВ ) рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред
рдпрд╣ рдирд┐рдХрд▓рд╛, рдИрдорд╛рдирджрд╛рд░, рдмреЛрдЭрд┐рд▓ рдФрд░ рдЕрдирд╛рдбрд╝реА рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ 1 рдореЗрдВ, рд╕рдореНрдорд╛рдирд┐рдд k_d рдиреЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд▓реА рдФрд░ mhook ( MHook рдмрдирд╛рдо Zuma ) рдкрд░ рдЕрдкрдиреЗ рдЖрд╡рд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред
рдмреЗрд╢рдХ, рдореБрдЭреЗ рдПрдХ рдРрд╕реЗ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдЬреЛ рди рдХреЗрд╡рд▓ __cdecl рдХреЗ рд╕рд╛рде рдЕрд╡рд░реЛрдзрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрд╡рд░реЛрдзрди рдХреЛ рдХреЛрдб рдореЗрдВ рд▓рдЧрднрдЧ рдХрд╣реАрдВ рднреА рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдЖрдпрд╛ рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд╡рд░реЛрдзрди рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рд╕рдлрд╛рдИ рд╕реЗ, рдбреА_рдбреА рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕рдм рдХреБрдЫ рдЕрд╡рд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд╣рдбрд╝рддрд╛рд▓реА-рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣рд╛рде рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреИрдХ рд╕реЗ рддрд░реНрдХ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ (рдХрдо рд╕реЗ рдХрдо, рд╕рдВрднрд╡рддрдГ, рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГред)
рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред


рдХрд╛рдордХрд╛рдЬреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ MHook рдХреА рдЬрд░реВрд░рдд рд╣реИ, k_d рд╕реЗ рдПрдХ рдЖрд╡рд░рдг, рдордзреНрдпрдо рд╕реАрдзреЗ рд╣рд╛рде, рдореЗрдЬ рдХреЗ рдиреАрдЪреЗ рд╕реЗ рдПрдХ рд╕рд┐рд░ рдФрд░ рдкрд░рд╛рдорд░реНрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрддрдЦ: рдмрддрдЦ ред

рддреЛ рдЪрд▓рд┐рдП!

рдореИрдВ) рдХрд╛рд░реНрдпрд╢реАрд▓рддрд╛:

1) рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

void debug_msg(const char* func_name, const char* txt,...) { va_list args; FILE *file; char file_name[256]="\0"; strcpy(file_name,"C:\\VariadicDump\\"); strcat(file_name,func_name); strcat(file_name,".txt"); fopen_s(&file,file_name, "a"); va_start(args,txt); vfprintf(file,txt,args); va_end (args); fprintf(file, "\n"); fclose(file); } 


рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 debug_msg("Advanced", "--%s arg list started--", funcName); 


FuncName = "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рдХрдИ рдмрд╛рд░ рдкрдврд╝рддреЗ рд╣реИрдВ" рд╣рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде C: \ VariadicDump \ Advanced.txt рдлрд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ:

--Hello, world, you read this message so many times arg list started--


2) рдкрд╛рд░реНрд╕ lua_State (рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдФрд░ рдирд┐рдЬреА рдХреЗ рд▓рд┐рдП! рдЙрдкрдпреЛрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреИрдЯ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MMO рд░реВрдиреНрд╕ рдСрдлрд╝ рдореИрдЬрд┐рдХ рдореЗрдВ, рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ):

 void Parse_LuaState(lua_State *L, const char *func_name) { int n = lua_gettop(L); std::vector<const char*> names; for(int i = 0; i < n; i++) { size_t arg2Len = 0; names.push_back(luaL_checklstring(L, i, &arg2Len)); } string str = ""; for (unsigned int i=0; i<names.size(); i++) { str.append(names[i]); str.append("; "); } debug_named_msg(func_name, str.c_str()); } 


рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 void lua_hook(lua_State *L) { Parse_LuaState(L, "Lua"); } 


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, * L рдХреЗ рдкрд╛рд╕ 2 рддрд░реНрдХ рдереЗ - рдЪреИрдЯ рдФрд░ рдкрд╛рда рдХрд╛ рдкреНрд░рдХрд╛рд░ (1 рдФрд░ "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛, рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдирдлрд░рдд рдХрд░рддреЗ рд╣реИрдВ?")ред рдлрд╝рдВрдХреНрд╢рди "C: \ VariadicDump \ Lua.txt" рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдЧрд╛:

1; hello, world, are you hate to hear it again?


3) рд╕реНрдЯреИрдХ рд╕реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддрд░реНрдХ:

 void parseArgs(int *ptr, int size, char* funcName) { debug_msg("Advanced", "--%s arg list started--", funcName); for(int i=0; i*4<size; i++) { debug_msg("Advanced", " |---Element %d: %d", i, ptr[i]); } debug_msg("Advanced", "--arg list finished--\n"); } 


рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 void con_hook(Context *context) { int *ptr = (int*)(void*)(context->ESP+4); parseArgs(ptr, con_arg_amount, __FUNCTION__); } 


рдирддреАрдЬрддрди, рддрд░реНрдХ рдХреА рдЧрдгрдирд╛ рдПрд╕реНрдк + рдЗрдВрдбреЗрдХреНрд╕ * 4 рдирд╛рдо ## _ arg_amount / 4 рдмрд╛рд░ рд╕реЗ рдХреА рдЬрд╛рдПрдЧреАред
рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, рд╡рд╣рд╛рдБ рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

4) рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрддрд╛:

 int GetMainModuleAddress() { DWORD dwAddress = NULL; HANDLE hthSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, _getpid()); if (hthSnapshot) { MODULEENTRY32 me = { sizeof(me) }; if (Module32First(hthSnapshot, &me)) { CloseHandle(hthSnapshot); dwAddress = (DWORD)me.modBaseAddr; } } return dwAddress; } 


рдХреБрдЫ рд╡рд┐рд╢реЗрд╖, рдЖрд╡рд╢реНрдпрдХ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджрд░рд╛рд░ рдореЗрдВ - рдЖрднрд╛рд╕реА рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ:

 #define RECALC(name)\ name##_Detour = (t##name)((int)name##_Detour-0x400000+rift); 


рдЬрд╣рд╛рдВ ## _ рдбреЗрдЯреМрд░ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

5) рд╕рдВрд▓рдЧреНрди / рдЕрд▓рдЧ рдХрд╛рд░реНрдп:

рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рд╕реНрдерд╛рдкрд┐рдд / рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдЖрд╡рд░рдгред рд╣рдореЗрдВ DllMain рдХреА рдЦреЛрдЬ рдореЗрдВ рдХреЛрдб рдкрд░ рдЪрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :)

рд╕реВрдЪреА рдореЗрдВ рдЕрдВрддрд┐рдо, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рджрд┐рд▓реЛрдВ рдореЗрдВ рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ - unhook'er:

 BOOL UnHookFunction(DWORD addr, unsigned char *lpBackup) { DWORD dwAddr = addr; if (WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, lpBackup, 6, 0)) return TRUE; return FALSE; } 


рдпрд╣ рдмрд╕ рдФрд░ рд╕реНрд╡рд╛рджрдкреВрд░реНрд╡рдХ рдЙрд╕ рдХреЛрдб рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдЦрдбрд╝рд╛ рдерд╛ред

II) рдореИрдХреНрд░реЛрдВ

рдореИрдХреНрд░реЛрдЬрд╝ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЕрд╢реНрд▓реАрд▓ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

1) RECALC:
 #define RECALC(name)\ name##_Detour = (t##name)((int)name##_Detour-0x400000+rift); 


рдкрддрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд╣реИред

2)
 #define DETACH(name1)\ UnHookFunction((DWORD)name1##_Detour,name1##_var);\ 


рдкрд▓рдЯрд╛рд╡ рдкрд░ рдПрдХ рдЖрд╡рд░рдг ... рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рд╕реЗ рдХреЛрдб рдЬрд╛рд░реА рдХрд░рдирд╛ред

3) рдПрдЯреАрдЖрд░ / рдПрдЯреАрдЖрд░_рдЖрд░:
 #define ATR(name)\ name##_var = RegHook((long)name##_Detour, (long)(void*)name##_hook) #define ATR_R(name)\ RECALC(name)\ name##_var = RegHook((long)name##_Detour, (long)(void*)name##_hook) 


рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рджреЛ рдЬреБрдбрд╝рд╡рд╛рдВ рднрд╛рдИред RegHook - Mhook рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╕рдорд╛рд░реЛрд╣, рд╡рд┐рд╡рд░рдг рд╕реНрд░реЛрдд рдореЗрдВ рдпрд╛ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╣реА рд▓реЗрдЦ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЦрд╛рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реИрд░ рдХреЗ рджреМрд░рд╛рди рдирдЧреНрди рдирд╣реАрдВ рджреМрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЛрд╣рд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЗрдЬрд╣реЛрдЧ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдирд╛ рд╣реИ (рдмрд╕ рдордЬрд╛рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреЛрдИ рднреА рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдПрдЧрд╛)ред

рд╕рдВрд▓рдЧреНрди () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;

4) рдбреАрдЯреАрдЖрд░:
 #define DTR(name)\ DETACH(name) 


рд▓рдкреЗрдЯреЗрдВ рдкрд░ рд▓рдкреЗрдЯреЗрдВред
рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдЖрд╡рд╢реНрдпрдХрддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдЯреАрдЖрд░ ^ ^ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ (рдбреАрдЯреИрдЪ рдпреБрдЧ рдХрд╛ рдПрдХ рдЕрд╡рд╢реЗрд╖ рд╣реИ, рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрдпрд╛ рд╣реИ)ред

рдЯреБрдХрдбрд╝реА () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;

5) RF_O_UP_FUNC_CONTEXT:
 #define RF_O_UP_FUNC_CONTEXT(name1, adres, args)\ typedef void (__cdecl * t##name1 ) ();\ t##name1 name1##_Detour = ( t##name1 ) ( adres );\ /* */ void name1##_hook(Context *context);\ /*     ;   - */ BYTE *name1##_var;\ /*    */ int name1##_arg_amount = args;\ /*  ,   (. )*/ 


рдЗрд╕ рдЧрд╛рдВрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рдЪрд╛рд▓рд╛рдХ рдореИрдХреНрд░реЛ рд╣реИред рдЕрд╕рд▓ рдореЗрдВ, рд╡рд╣ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдФрд░ рдПрдХ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИ, рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдЖрджрд┐ рд╕реЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 RF_O_UP_FUNC_CONTEXT(con, 0x60D710, 0x8); 


рд╣рдо 2 рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - con_Detour рдФрд░ con_hook, рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ 0x60D710 рдкрддреЗ рдкрд░ рдмрд╛рдБрдзрддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рд╣рдореЗрдВ рддрд░реНрдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ 2 рдЯреБрдХрдбрд╝реЗ рдорд┐рд▓реЗрдВрдЧреЗред

III) рдХреЗрд╕ рд╕реНрдЯрдбреА

 RF_O_UP_FUNC_CONTEXT(con, 0x60D710, 0x8); void lua_hook(Context *context) { int *ptr = (int*)(void*)(context->ESP+4); //  1      ptr parseArgs(ptr, con_arg_amount, __FUNCTION__); //    , 2  -     ! debug_msg("LuaDump", "%s", ptr[0]); // 1   -   .. } 


рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dll рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ lua рд╕реЗ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╕рд╛рде рд╣реА khd рд╕реЗ mhook + рдПрдХ рдЖрд╡рд░рдг рднреА рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЛрд░реНрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рдо рдФрд░ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рднреА k_d рдХреЛ рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж, рдСрд▓ рдж рдмреЗрд╕реНрдЯ! рдФрд░ рд╣рд╛рдБ рдмрддрдЦ рдЬреАрдд рдЬрд╛рдПрдЧрд╛! рдиреАрдо рд╣рдХреАрдо!

Source: https://habr.com/ru/post/In174647/


All Articles