GetMemberFuncAddr

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

    };

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值