我已经HOOK 了endscene函数,修改的是虚表。。然后执行的流程是先跳到我的函数里面drawtext。我然后再返回原来的的endscene。
CD3DFont *Font=NULL;
初始化Font 已经在别的地方做过了。我想不断的读取内存里面的两个数据,然后drawtext想实现类似于一个点移动来标出坐标(魔兽);
HRESULT _stdcall My_EndScene(
LPDIRECT3DDEVICE8 pDxdevice
)
{
memcpy(&HeroNext,0xaaaaa,4)//读链表头
while(HeroNext!=0)//如果还有坐标要读就继续循环
{
float x=0,y=0;
memcpy(&x,(LPVOID)(OffsetPointAddr+0x78),4);//内存读出坐标,部分偏移计算以及坐标转换略去了,
memcpy(&y,(LPVOID)(OffsetPointAddr+0x7c),4);
Font->InitDeviceObjects(pDxdevice);
Font->DrawText(x,y,D3DCOLOR_ARGB(0xFF, 0xff, 0xff, 0), "●");
/*
这里我把X,Y换为0,0就能正确输出。如果直接写x,y想让点移动。运行中就会崩溃。。求高手解答,这里要怎样写。。。我的目的就是在地图上画出多个点,而且这些点的坐标是我读出来的
是不是这些函数的调用有问题,求高手解答啊。3Q。。就差这一步了,对D3D不太懂啊
*/
Font->InvalidateDeviceObjects();
。。。
。。。。略去部分了
Hero=Hero+0x18;
memcpy(&HeroNext,(LPVOID)Hero,4);//下一个英雄
}
return pfn_endscene(pDxdevice);
};
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)