首页
社区
课程
招聘
[分享]分享一个读取无限多级指针的函数(需要C++11支持)
发表于: 2017-5-25 16:32 6334

[分享]分享一个读取无限多级指针的函数(需要C++11支持)

2017-5-25 16:32
6334

#define E_BAD_PTR 0xFFFFFFFF

template<typename T, typename ... ARGS>
T Read(ARGS...args)
{
	DWORD parm[] = { (DWORD)args... };
	DWORD RetVal = 0;
	__try
	{
		for (DWORD curaddr : parm)
		{
			RetVal += curaddr;
			RetVal = *(DWORD*)RetVal;
		}
	}
	__except (1)
	{
		return (T)E_BAD_PTR;
	}
	return (T)RetVal;
}

调用:
DWORD dwVal = Read<DWORD>(0x12345678,0x123,0x12,1);
WORD wVal = Read<WORD>(0x12345678,0x123,0x12,1);
BYTE bVal = Read<BYTE>(0x12345678,0x123,0x12,1);
vs2015下编译正常,其他的版本不清楚!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
好办法,谢谢分享~!
2017-5-25 16:46
0
雪    币: 244
活跃值: (454)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我突然觉得我没学过C++
2017-5-25 21:14
0
雪    币: 80
活跃值: (122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
寧靜致遠 我突然觉得我没学过C++
呵呵,刚刚研究c++11的时候我也迷糊,习惯了就好!
2017-5-26 18:56
0
雪    币: 2795
活跃值: (159764)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习了
2020-8-3 02:23
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
妙啊
2020-8-24 19:19
0
雪    币: 142
活跃值: (116)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
有问题.你这个代码猛一看确实好用.假设一个地址中比如0x100000 这个地址中存放的数据是2个word类型组成的 ,那么怎么用 <WORD>来读出来呢?
你默认所有的数据都是按4字节对齐来读的啊
2020-8-28 18:36
0
雪    币: 9941
活跃值: (2143)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
C++11 的变参模版果然好用
2020-8-30 12:20
0
雪    币: 7130
活跃值: (3778)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
落花满怀 有问题.你这个代码猛一看确实好用.假设一个地址中比如0x100000 这个地址中存放的数据是2个word类型组成的 ,那么怎么用 来读出来呢? 你默认所有的数据都是按4字节对齐来读的啊
 return (T)RetVal;
2020-9-1 00:18
0
游客
登录 | 注册 方可回帖
返回
//