博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用fastcall 代替汇编hook thiscall
阅读量:6600 次
发布时间:2019-06-24

本文共 1446 字,大约阅读时间需要 4 分钟。

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

#include 
#include
#include
#include
#include "mhook-lib/mhook.h"class A{private: int m_data; char* m_sz[20];public: int setMsg(const char* pstr, int data) { if (pstr != NULL && *(char*)pstr != '\0') { memcpy(m_sz, pstr, 20); } m_data = data; return 0; } void showMsg() { if (m_sz[0] != '\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!", 12); 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!", 14); theA->showMsg(); theA->setMsg("hello C!", 1); theA->showMsg(); return 0;}

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

转载于:https://www.cnblogs.com/Fightingbirds/p/10649970.html

你可能感兴趣的文章
在 SELECT 查询中使用集运算符
查看>>
新造了一个管理模板代码的工具 -- Pharah
查看>>
通用Windows平台应用程序开始恢复Win32功能
查看>>
Airbnb如何简化1000多位工程师的Kubernetes工作流程?
查看>>
Scrum Master的成功定义是什么?
查看>>
Windows Server入门系列37 创建网络共享
查看>>
自己diy封装xp操作系统
查看>>
veritas升级及备份至磁盘两个问题简要说明
查看>>
Scoket:UDP通讯模型
查看>>
扯点关于经济的淡-贸易顺差都是有利的吗
查看>>
国产IT厂商激辩微软 微软反垄断调查或有突破
查看>>
《进化——我们在互联网上奋斗的故事》一一1.4 从精兵到强将 ——技术人员的职场发展之路...
查看>>
通过 LLVM 在 Android 上运行 Swift 代码
查看>>
《C程序员从校园到职场》一第2章 学校到职场2.1 认清自身不足
查看>>
ant打jar包
查看>>
CISCO交换机密码恢复
查看>>
Linux/Unix的精巧约定两例及其简析:目录权限和文本行数
查看>>
WebDAV助手1.1.0更新
查看>>
微服务事务处理
查看>>
【linux】 linux gpio操作
查看>>