//int __thiscall sub_100076B6(void *this, int a2, int a3, int a4)
typedef int (/*__fastcall*/* sub_100076B6_T)(/*int duma,int dumb,*/ int a2, int a3, int a4);
sub_100076B6_T sub_100076B6_T_old = 0;
// int __fastcall sub_100076B6_T_new(int duma,int dumb, int a2, int a3, int a4)
// {
// PRECALL(sub_100076B6_T)
// int ret = sub_100076B6_T_old( duma, dumb, a2, a3, a4);
// logdata((DWORD*)ret);
// log("%d %s=%s",strlen((char*)*(DWORD*)(ret+4)),(char*)(ret+8),(char*)*(DWORD*)(ret+4));
// POSTCALL(sub_100076B6_T)
// }
template< typename FromType,typename ToType>void GetMemberFuncAddr_VC6(ToType& addr,FromType f)
{
union
{
FromType _f;
ToType _t;
}ut;
ut._f = f;
addr = ut._t;
}
// A *pA=new A;
// int addr=0;
// GetMemberFuncAddr_VC6(addr,&A::Func1);
class hookfn1{
public:
int hook_sub_100076B6_new( int a2, int a3, int a4)
{
PRECALL(sub_100076B6_T)
int ret = sub_100076B6_T_old( /* duma, dumb, */ a2, a3, a4);
logdata((DWORD*)ret);
log("%d %s=%s",strlen((char*)*(DWORD*)(ret+4)),(char*)(ret+8),(char*)*(DWORD*)(ret+4));
POSTCALL(sub_100076B6_T)
}
typedef int (/*__fastcall*/* sub_100076B6_T)(/*int duma,int dumb,*/ int a2, int a3, int a4);
sub_100076B6_T sub_100076B6_T_old = 0;
// int __fastcall sub_100076B6_T_new(int duma,int dumb, int a2, int a3, int a4)
// {
// PRECALL(sub_100076B6_T)
// int ret = sub_100076B6_T_old( duma, dumb, a2, a3, a4);
// logdata((DWORD*)ret);
// log("%d %s=%s",strlen((char*)*(DWORD*)(ret+4)),(char*)(ret+8),(char*)*(DWORD*)(ret+4));
// POSTCALL(sub_100076B6_T)
// }
template< typename FromType,typename ToType>void GetMemberFuncAddr_VC6(ToType& addr,FromType f)
{
union
{
FromType _f;
ToType _t;
}ut;
ut._f = f;
addr = ut._t;
}
// A *pA=new A;
// int addr=0;
// GetMemberFuncAddr_VC6(addr,&A::Func1);
class hookfn1{
public:
int hook_sub_100076B6_new( int a2, int a3, int a4)
{
PRECALL(sub_100076B6_T)
int ret = sub_100076B6_T_old( /* duma, dumb, */ a2, a3, a4);
logdata((DWORD*)ret);
log("%d %s=%s",strlen((char*)*(DWORD*)(ret+4)),(char*)(ret+8),(char*)*(DWORD*)(ret+4));
POSTCALL(sub_100076B6_T)
}
};
sub_100076B6_T_old = (sub_100076B6_T)((DWORD)hmodrootres+(DWORD)0x76B6);
DWORD sub_100076B6_Taddrnew=0;
GetMemberFuncAddr_VC6(sub_100076B6_Taddrnew,&hookfn1::hook_sub_100076B6_new);
DetourAttach(&(PVOID&)sub_100076B6_T_old, (VOID*)sub_100076B6_Taddrnew);