看雪论坛
发新帖

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

HsinTsao 2017-9-12 11:10 169
#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 次赞赏,累计¥0.00
最新回复 (3)
3
malokch 2017-9-12 11:38
2
很简单,就是定义一个指针和一个函数。分别是Old_CopyFileA和New_CopyFileA。其中Old_CopyFileA是指针,New_CopyFileA是一个函数,函数体就是跟在HOOLDEF后面的函数体。功能上看Old_CopyFileA存放原函数的指针,New_CopyFileA是hook的函数。
运用这个宏就可以节省代码量,使代码看起来简介,一处代码就可以声明一个指针和对应的函数。
HsinTsao 2017-9-12 17:12
3
malokch 很简单,就是定义一个指针和一个函数。分别是Old_CopyFileA和New_CopyFileA。其中Old_CopyFileA是指针,New_CopyFileA是一个函数,函数体就是跟在HOOLDE ...
非常感谢,懂了,不过我还有一个小问题。Old_CopyFileA存放了原函数指针,在New_CopyFileA的函数实现中调用了Old_CopyFileA,也就是原函数,但是已经hook了导出表中CopyFileA,那么Old_CopyFileA的函数指针,指向的是哪里呢?
3
malokch 2017-9-12 21:41
4
HsinTsao 非常感谢,懂了,不过我还有一个小问题。Old_CopyFileA存放了原函数指针,在New_CopyFileA的函数实现中调用了Old_CopyFileA,也就是原函数,但是已经hook了导出表中Co ...
这取决于你的hook方案,是基于动态链接表的hook还是内联hook。前者的话就是指向原函数,后者的话就是指向内联hook的stub代码。
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 微信公众号:ikanxue
Time: 0.012, SQL: 9 / 京ICP备10040895号-17