首页
社区
课程
招聘
[求助]关于宏定义的一些问题,代码不太理解,希望大神指点一下!!
发表于: 2017-9-12 11:10 2494

[求助]关于宏定义的一些问题,代码不太理解,希望大神指点一下!!

2017-9-12 11:10
2494
#define HOOKDEF(return_value, calling_convention, apiname, ...) \
	return_value (calling_convention *Old_##apiname)(__VA_ARGS__); \
	return_value calling_convention New_##apiname(__VA_ARGS__)
HOOKDEF(BOOL, WINAPI, CopyFileA,
	__in  LPCTSTR lpExistingFileName,
	__in  LPCTSTR lpNewFileName,
	__in  BOOL bFailIfExists
)
{
	BOOL bOk = FALSE;
	printf("CopyFileA 被调用\r\n");
	bOk = Old_CopyFileA(lpExistingFileName, lpNewFileName, bFailIfExists);
	if(bOk)
	{
		printf("文件:%s被复制为:%s\r\n", lpExistingFileName, lpNewFileName);
	}
	
	
	return bOk;
}
上面是这个宏的定义和声明
下面是使用
extern
HOOKDEF(BOOL, WINAPI, CopyFileA,
	__in  LPCTSTR lpExistingFileName,
	__in  LPCTSTR lpNewFileName,
	__in  BOOL bFailIfExists
);

这个宏是什么意思呢???

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
2
很简单,就是定义一个指针和一个函数。分别是Old_CopyFileA和New_CopyFileA。其中Old_CopyFileA是指针,New_CopyFileA是一个函数,函数体就是跟在HOOLDEF后面的函数体。功能上看Old_CopyFileA存放原函数的指针,New_CopyFileA是hook的函数。
运用这个宏就可以节省代码量,使代码看起来简介,一处代码就可以声明一个指针和对应的函数。
2017-9-12 11:38
0
雪    币: 33
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
malokch 很简单,就是定义一个指针和一个函数。分别是Old_CopyFileA和New_CopyFileA。其中Old_CopyFileA是指针,New_CopyFileA是一个函数,函数体就是跟在HOOLDE ...
非常感谢,懂了,不过我还有一个小问题。Old_CopyFileA存放了原函数指针,在New_CopyFileA的函数实现中调用了Old_CopyFileA,也就是原函数,但是已经hook了导出表中CopyFileA,那么Old_CopyFileA的函数指针,指向的是哪里呢?
2017-9-12 17:12
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
HsinTsao 非常感谢,懂了,不过我还有一个小问题。Old_CopyFileA存放了原函数指针,在New_CopyFileA的函数实现中调用了Old_CopyFileA,也就是原函数,但是已经hook了导出表中Co ...
这取决于你的hook方案,是基于动态链接表的hook还是内联hook。前者的话就是指向原函数,后者的话就是指向内联hook的stub代码。
2017-9-12 21:41
0
游客
登录 | 注册 方可回帖
返回
//