多级指针读取
本帖最后由 以南 于 2018-4-14 09:11 编辑额。先说一下,如果要认真说不能算原创。有借鉴的地方。
但是嘛,API用来用去还是这样的,就厚脸皮说下是原创了{:1_918:}
起因就是最近看了些E的源码,老是ReadProcessMemory里面套ReadProcessMemory,全是10进制。
所以,呵呵哒。
很简单直接上源码。
DWORD ReadAddress(HANDLE &hProcess,DWORD &dwBase, int Numb, ...)
{
DWORD Address = dwBase;
va_list dw_Ptr;
va_start(dw_Ptr, Numb);
__try
{
for (int nArg = 0; nArg <= Numb; nArg++)
{
if (!nArg)
ReadProcessMemory(hProcess, (PBYTE*)(Address), &Address, sizeof(DWORD), 0);
DWORD Dr = va_arg(dw_Ptr, DWORD);
if (nArg!= Numb)
ReadProcessMemory(hProcess, (PBYTE*)(Address + Dr), &Address, sizeof(DWORD), 0);
}
va_end(dw_Ptr);
return Address;
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
return NULL;
}
}
调用。
DWORD base = ReadAddress(hpros, addrse, 3, 12,6640, pc5);
说明一下,带入第一个函数就不用说了,第二个是基址。第三个是你要读取的指针数,比如我这里写的就是3级指针。
你第三个参数是多少个,后面就带多少个偏移。我这里前2个用的都是整型,最后一个是DWORD。
但是呢,ReadProcessMemory这个函数在读的时候,如果是个空指针它不会把空地址赋值给里面的Address,所以它依旧是之前的值。
比如我的6640是个偏移上读进去之后为空,它不会赋值。并保留原来的值。继续读下一个PC5。
然后就是,你如果要读一个数据,你依旧要自己单独写。多的就不解释了,经常用这个函数的比较明白。
对了,,也可以用0x11这样,16进制为参数多的自己试试吧,这几个应该够用了。
付个效果图。
欢迎分享交流源码。我还是喜欢易语言某模块用的“[+xx]”这种模式读取。改天我去改到c语言试试 苏紫方璇 发表于 2018-4-14 10:44
欢迎分享交流源码。我还是喜欢易语言某模块用的“[+xx]”这种模式读取。改天我去改到c语言试试
哈哈,因为没学过E语言,所以看的时候有点难受。所以就写了这个。
总的来说,C/C++国内造轮子的还是太少啊。不像E,轮子不要太多。 以南 发表于 2018-4-14 10:49
哈哈,因为没学过E语言,所以看的时候有点难受。所以就写了这个。
总的来说,C/C++国内造轮子的还是太少 ...
是的,E的模块太多了,覆盖面很广,而C/C++基本上类库要去外面找资料,而且基础的也很少 苏紫方璇 发表于 2018-4-14 10:53
是的,E的模块太多了,覆盖面很广,而C/C++基本上类库要去外面找资料,而且基础的也很少
哎,不知道为什么,明明E是个小众,却发展的最适合大众。
大众的东西没人分享,都是公司惹的祸。好东西都在他们手上。 不会编程看不懂.但感觉很牛的样子.哈哈 jason1204 发表于 2018-4-14 11:01
不会编程看不懂.但感觉很牛的样子.哈哈
那非常感谢你的回复支持。 学习 借鉴一下 感谢发布原创作品,吾爱因你更精彩!
页:
[1]
2