c++ DLL内存读取崩溃
C++ DLL Memory Reading Crashes
我整天都在尝试如何正确地读取我注入DLL的游戏内存,它可以正确工作,但如果DLL达到其他类型的变量不是"浮动",那么它就崩溃了。我的问题是,我怎么能检测到如果是浮动和避免崩溃。下面是我的代码:
for (DWORD i = 0x1000000; i < 0x2FFFFFF; i += 0x4)
{
DWORD Base = *(DWORD*)(base + i);
DWORD lvl_2 = *(DWORD*)(Base + 0x8);
float* posx = static_cast<float*>((float*)(lvl_2 + 0x90));
Position_x = static_cast<float>(*posx);
if (Position_x > 7.05f && Position_x < 7.20f) //test > 7.05f && test < 7.20f || i == 0x2217710
{
fprintf(file, "Pointer: 0x%x Position x: %.2f n", i, Position_x);
}
}
这是一个扫描器,我做更新指针的游戏知道结构偏移。如果我使用I == 0x2217710作为条件,则此代码可以正常工作,它返回播放器的正确位置x。如果我删除条件,它崩溃由于行Position_x = static_cast…正在将其他类型的变量转换为浮点数,这对于某些变量是非法的。我怎么能这么做?
首先,我很确定问题不是当你有一个指针不是浮点数时它崩溃。所有二进制值0 - 0xFFFFFFFF通常都是有效的浮点值,但有些是"特殊的",例如"不是数字"-但只要你只比较值等,使用这些值也会很好-将在比较中显示为false
。
你的实际问题是,你正在做一个指针从base+i
,然后使用的内容在该位置作为另一个指针-但如果base+i
不持有一个有效的指针{这是几乎大多数32位或64位的值在大多数系统},那么你的下一个抓取将会出错。不幸的是,没有简单的方法来检查内存地址是否有效。在Windows中,您可能会使用__try
, __except
来捕获当您试图读取无效的内存地址和"做其他事情"时。
相关文章:
- Visual Studio在尝试读取resource.txt文件时崩溃
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- For 循环在尝试读取数组 c++ 时程序崩溃
- Qt 5.9中的QML崩溃-帮助读取堆栈跟踪
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- C 通过char读取文件字符串的文件char;崩溃
- 尝试从另一个过程读取32位整数时,ReadProcessMemory崩溃了
- 为什么我不能使用 ifstream 读取撇号而不会崩溃?
- 从CSV文件读取时,试图将值插入一个字符串中时崩溃
- c++ ifstream,从文件读取崩溃
- 程序使用SCANF读取字符串时会崩溃
- 简单的Logger类VSNPrintf正在随着读取访问违规行为而崩溃
- 程序使用FSCANF读取文件数据后崩溃
- 当我设置readdata并读取功能以上载文件时,libcurl会在fwrite()上崩溃
- 我的C++程序在尝试输出从文件中读取的数据时崩溃
- 读取空格会使解析器崩溃.为什么?
- 二进制树:从文件崩溃中读取
- C++程序在读取文本文件时崩溃
- C++程序崩溃中的文件读取错误
- 通过WinAPI套接字连接到蓝牙设备时崩溃(读取位置0x00000004时发生访问冲突)