我试图拦截(挂钩)一个使用参数列表来获取结果的函数,然后调用旧函数。
// int __cdecl Ordinal578(char *a1, unsigned int a2, int a3, char a4) (HEXRAYS)
typedef int(__cdecl *Ordinal578)(char *a1, unsigned int a2, const char * a3, ...);
Ordinal578 Ordinal578org = nullptr;
Ordinal578 Ordinal578ptr = nullptr;
int __cdecl Ordinal578my(char *a1, unsigned int a2, const char * a3, ...)
{
int result = 0;
va_list args;
va_start(args, a3);
result = Ordinal578ptr(a1, a2, a3, args); // if replace this on "vsnprintf_s(a1, a2, a2, a3, args);" it works 5-10 min and then crash!
va_end(args);
return result;
}
程序在通话后崩溃: Ordinal578ptr(a1,a2,a3,args)
如何设置这些功能的挂钩?
答案 0 :(得分:2)
va_list
。__builtin_apply_args ()
和朋友。