利用fastcall中ecx edx传递的特性,解决了ecx需要内嵌汇编才能实现hook thiscall函数的问题。

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <string>
#include "mhook-lib/mhook.h" class A
{
private:
int m_data;
char* m_sz[]; public:
int setMsg(const char* pstr, int data)
{
if (pstr != NULL && *(char*)pstr != '\0')
{
memcpy(m_sz, pstr, );
} m_data = data; return ;
} void showMsg()
{
if (m_sz[] != '\0')
{
printf("%s,%d\n", m_sz,m_data);
}
} }; typedef int (__thiscall A::* TYPE_Ptr)(const char* pstr, int data); typedef int (__fastcall * TYPE_setMsgPtr)(void* pthis, void* notUsed, const char*, int); TYPE_setMsgPtr pNew; int __fastcall HookSetMsg(void * pThis ,void * notUsed, const char* pstr, int data)
{ printf("hook new function\n");
return pNew(pThis, notUsed, pstr, data);
} TYPE_setMsgPtr pfnSetMsg = NULL; //实现hook thiscall 的方法,不需要用naked汇编
int main(int argc, char **argv)
{
A* theA = new A();
theA->setMsg("hello A!", ); theA->showMsg(); TYPE_Ptr px = &A::setMsg;
int x = *(int*)&px; //printf("%p,%p\n", px, x); pNew = (TYPE_setMsgPtr)x;
Mhook_SetHook((PVOID*)&pNew, HookSetMsg); theA->setMsg("hello B!", );
theA->showMsg(); theA->setMsg("hello C!", );
theA->showMsg(); return ;
}

仅列出关键代码,其他不展示了,不懂的留言。

使用fastcall 代替汇编hook thiscall的更多相关文章

  1. 汇编 -- Hook API (MessageBoxW)

    说到HOOK.我看了非常多的资料和教程.无奈就是学不会HOOK.不懂是我的理解能力差.还是你们说的 不够明确,直到我看了下面这篇文章,最终学会了HOOK: http://blog.sina.com.c ...

  2. C++反汇编第一讲,认识构造函数,析构函数,以及成员函数

    C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { ...

  3. X86调用约定 calling convention

    http://zh.wikipedia.org/wiki/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A 这里描述了在x86芯片架构上的调用约定(calling con ...

  4. [8]windows内核情景分析--窗口消息

    消息与钩子 众所周知,Windows系统是消息驱动的,现在我们就来看Windows的消息机制. 早期的Windows的窗口图形机制是在用户空间实现的,后来为了提高图形处理效率,将这部分移入内核空间,在 ...

  5. 关于调用约定(cdecl、fastcall、、thiscall) 的一点知识(用汇编来解释)good

    函数调用规范   当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个.什么样的参数.即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者 ...

  6. stdcall、cdecl、fastcall、thiscall 、naked call的汇编详解

    函数调用规范   当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个.什么样的参数.即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者 ...

  7. 汇编Ring 3下实现 HOOK API

    [文章标题]汇编ring3下实现HOOK API [文章作者]nohacks(非安全,hacker0058) [作者主页]hacker0058.ys168.com [文章出处]看雪论坛(bbs.ped ...

  8. c++hook内联汇编模板

    1 #include "Windows.h" 2 #include "tlhelp32.h" 3 #include "String.h" 4 ...

  9. C++函数调用方式约定stdcall,cdecl,pascal,naked,thiscall,fastcall

    https://www.cnblogs.com/xiangtingshen/p/11014514.html C++函数调用约定_cdecl约定:参数:从右向左依次入栈堆栈平衡:调用方平衡 #inclu ...

随机推荐

  1. 父网访问子网(校园网访问校园网IP路由器下的一台电脑)远程路由器下的电脑

    网路由器添加转发规则,端口转发,本人仅使用Pandora Box路由器固件 当然设置了这些还不够,还需要设置其他的允许端口转发的东西,例如 然后远程桌面的话还需要设置某些相关设置,例如电脑允许使用远程 ...

  2. 关于eric4和pyqt的入门学习(转)

    在Eric4下用PyQt4编写Python的图形界面程序 转载请注明作者RunningOn 本文是PyQt4的入门教程.网上能搜到其它教程,但我觉得讲得不是很清楚,希望这篇文章对入门者更加有帮助. 先 ...

  3. shell编辑器vi的常用命令

    一:翻页 ctrl+u向上翻半页 ctrl+f向上翻一页 ctrl+d 向下翻半页 ctrl+b 向下翻一页 二:移动光标指令 0: 光标移至当前行首 $: 光标移至当前行尾 三:常用插入.删除指令 ...

  4. 软件测试实验二----selenium、katalon、junit

    1.安装firefox和seleniumIDE.katalon 安装按成后在Firefox中有seleniumIDE.katalon的图标 2.使用katalon导出测试脚本 点击katalon的插件 ...

  5. Docker+Teamcity+Maven+SVN搭建持续集成环境

    这是使用Jenkins作为CI/CD工具,Teamcity的作用是相同的.

  6. java0429 wen 数据库

  7. 微博Rss邮箱推送系统

    微博Rss邮箱推送

  8. 16: vue + crypto-js + python前后端加密解密

    1.1 vue中使用crypto-js进行AES加密解密    参考博客:https://www.cnblogs.com/qixidi/p/10137935.html 1.初始化vue项目 vue i ...

  9. 解决docker主机配置了DaoCloud.io的加速后重启失败问题Failed to start Docker Application Container Engine

    问题说明 正常运行的docker主机配置了DaoCloud.io加速后重启报如下错 解决过程 问题原因: 重新配置加速器后发现,daocloud的配置信息是写在/etc/docker/daemon.j ...

  10. centos7安装supervisor

    安装supervisor cd /root/tools/ wget http://pnxcvm0bq.bkt.clouddn.com/get-pip.py python get-pip.py pip ...