关于*(DWORD*)的问题 但愿有人懂~!
本帖最后由 xiaoxu5015 于 2019-2-3 00:24 编辑__try{
DWORD ndBase=*(DWORD*)(Base_suoyouduixiang+0x1898);
DbgPrint("ndBase1=%x",ndBase);
ndBase=*(DWORD*)(ndBase+0x4e8);
DWORD renwu={0};
DbgPrint("ndBase2=%x",ndBase);
for(int i=0;i<50;i++)
{
if(i==2)
{
continue;
}
if(i==4)
{
continue;
}
renwu=(*(DWORD*)(ndBase+i*0x8))*0xD4;
renwu=*(DWORD*)(renwu+*(DWORD*)(0x2BCB60C)+0x4);
if(renwu==NULL)
{
continue;
}
DbgPrint("第%d个任务的名字是%s\r\n",i,renwu);
}
}__except(1)
{
DbgPrint("void DbgPrintRenwu(void)出现异常\r\n");
}
当i==2 或者4的时候renwu renwu就会出现异常 循环 终止循环要50次下面 有的地方有值 有的地方没值 怎么能让循环 遇见空指针的时候跳过 循环能继续运行 具体一点 可以把代码贴完整吗? 人造人 发表于 2019-2-3 00:23
具体一点
居然 这个点 还有人 6666 百度查了没找到好的方法小白一枚求教了 人造人 发表于 2019-2-3 00:25
可以把代码贴完整吗?
void DbgPrintRenwu(void)//打印任务列表
{
//dc [[[+4E8]+0*8]*0xD4++4] 第一个任务的名字
__try{
DWORD ndBase=*(DWORD*)(Base_suoyouduixiang+0x1898);
DbgPrint("ndBase1=%x",ndBase);
ndBase=*(DWORD*)(ndBase+0x4e8);
DWORD renwu={0};
DbgPrint("ndBase2=%x",ndBase);
for(int i=0;i<50;i++)
{
if(i==2)
{
continue;
}
if(i==4)
{
continue;
}
renwu=(*(DWORD*)(ndBase+i*0x8))*0xD4;
renwu=*(DWORD*)(renwu+*(DWORD*)(0x2BCB60C)+0x4);
if(renwu==NULL)
{
continue;
}
DbgPrint("第%d个任务的名字是%s\r\n",i,renwu);
}
}__except(1)
{
DbgPrint("void DbgPrintRenwu(void)出现异常\r\n");
}
DbgPrint("33333333");
} xiaoxu5015 发表于 2019-2-3 00:28
void DbgPrintRenwu(void)//打印任务列表
{
//dc [[[+4E8]+0*8]*0xD4++4]...
要完整的代码,指的是复制到我的ide可以编译运行的
这只是一个函数,没办法编译运行
人造人 发表于 2019-2-3 00:25
可以把代码贴完整吗?
其实 就是 renwu=(*(DWORD*)(ndBase+i*0x8))*0xD4; 当i等于2的时候renwu读取不到值 就出异常了
应该是空指针异常 我想让循环跳过去 当i等于3的时候 是能读取到值的 xiaoxu5015 发表于 2019-2-3 00:31
其实 就是 renwu=(*(DWORD*)(ndBase+i*0x8))*0xD4; 当i等于2的时候renwu读取不到值 就出异常了
...
所以,把代码贴完整
本帖最后由 xiaoxu5015 于 2019-2-3 00:41 编辑
人造人 发表于 2019-2-3 00:31
要完整的代码,指的是复制到我的ide可以编译运行的
这只是一个函数,没办法编译运行
这是个游戏辅助中的一个函数*(DWORD*) 是读取内存地址的我用VS2010是能编译通过的 xiaoxu5015 发表于 2019-2-3 00:37
这是个游戏辅助中的一个函数*(DWORD*) 是读取内存地址的你家 没运行这个游戏 你咋编译啊~!
那么,如果你在前面说清楚了这一点,我就不会向你要完整的代码了
我研究研究这个函数 人造人 发表于 2019-2-3 00:41
那么,如果你在前面说清楚了这一点,我就不会向你要完整的代码了
我研究研究这个函数
好的 时间很晚了注意休息 xiaoxu5015 发表于 2019-2-3 00:44
好的 时间很晚了注意休息
void DbgPrintRenwu(void) //打印任务列表
{
//dc [[[+4E8]+0*8]*0xD4++4] 第一个任务的名字
__try
{
DWORD ndBase = *(DWORD *)(Base_suoyouduixiang + 0x1898);
DbgPrint("ndBase1=%x", ndBase);
ndBase = *(DWORD *)(ndBase + 0x4e8);
DWORD renwu = {0};
DbgPrint("ndBase2=%x", ndBase);
for(int i = 0; i < 50; i++)
{
if(i == 2)
{
renwu = (*(DWORD *)(ndBase + i * 0x8)) * 0xD4;
DbgPrint("%x", renwu); // 看一看这里输出了什么
while(1);
}
if(i == 4)
{
continue;
}
renwu = (*(DWORD *)(ndBase + i * 0x8)) * 0xD4;
renwu = *(DWORD *)(renwu + *(DWORD *)(0x2BCB60C) + 0x4);
if(renwu == NULL)
{
continue;
}
DbgPrint("第%d个任务的名字是%s\r\n", i, renwu);
}
}__except(1)
{
DbgPrint("void DbgPrintRenwu(void)出现异常\r\n");
}
DbgPrint("33333333");
}
本帖最后由 xiaoxu5015 于 2019-2-3 21:53 编辑
人造人 发表于 2019-2-3 00:53
renwu【i】 = (*(DWORD *)(ndBase + i * 0x8)) * 0xD4;
renwu【i】没有数据的如果把if(i == 2)里注释掉 循环就终止了直接到DbgPrint("void DbgPrintRenwu(void)出现异常\r\n");
异常 应该是空指针异常发现异常后就直接跳到 except(1) 里了 就不向下循环了就导致 后面的数据 无法读取 xiaoxu5015 发表于 2019-2-3 21:50
renwu【i】 = (*(DWORD *)(ndBase + i * 0x8)) * 0xD4;
renwu【i】没有数据的如果把if(i == 2)里注 ...
void DbgPrintRenwu(void) //打印任务列表
{
//dc [[[+4E8]+0*8]*0xD4++4] 第一个任务的名字
__try
{
DWORD ndBase = *(DWORD *)(Base_suoyouduixiang + 0x1898);
DbgPrint("ndBase1=%x", ndBase);
ndBase = *(DWORD *)(ndBase + 0x4e8);
DWORD renwu = {0};
DbgPrint("ndBase2=%x", ndBase);
for(int i = 0; i < 50; i++)
{
if(i == 2)
{
renwu = (*(DWORD *)(ndBase + i * 0x8)) * 0xD4;
DbgPrint("%x", renwu); // 看一看这里输出了什么
while(1);
}
if(i == 4)
{
continue;
}
renwu = (*(DWORD *)(ndBase + i * 0x8)) * 0xD4;
renwu = *(DWORD *)(renwu + *(DWORD *)(0x2BCB60C) + 0x4);
if(renwu == NULL)
{
continue;
}
DbgPrint("第%d个任务的名字是%s\r\n", i, renwu);
}
}__except(1)
{
DbgPrint("void DbgPrintRenwu(void)出现异常\r\n");
}
DbgPrint("33333333");
}
页:
[1]