我试图拦截(挂钩)一个使用参数列表获取结果的函数,然后调用旧函数。

// 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)

如何设置这些功能的钩子(Hook)?

最佳答案

  • 查看是否有类似的函数代替va_list
  • 没有其他符合标准的方法。一些编译器支持va_list的魔术扩展,这些扩展可能会满足您的要求。查看您的编译器手册。对于gcc,请查看:__builtin_apply_args ()和 friend 。
  • 09-10 04:56
    查看更多