能力值:
( LV2,RANK:10 )
2 楼
BOOL NTAPI ReadProcessMemory ( IN HANDLE hProcess,
IN LPCVOID lpBaseAddress,
IN LPVOID lpBuffer,
IN SIZE_T nSize,
OUT SIZE_T * lpNumberOfBytesRead
)
这是函数原型,第3个参数是数据缓冲区的指针,你用float不成功的原因,可能是float的数据组织方式和int不一样,它没法将4个字节全部使用以致出现错误。
这是我自己的理解。
能力值:
( LV2,RANK:10 )
3 楼
我还遇到过读取数组时,也是弄的一头雾水。
byte bt[11][19];
ReadProcessMemory(open, (HMODULE)(0x18A2BC), (LPVOID)bt, 11*19, NULL);
如果我把bt类型换成int类型
int bt[11][19],bt存储的数据也不是正确的。
我都弄弄糊涂了,数据类型该怎么选择才好呢?
能力值:
( LV2,RANK:10 )
4 楼
ReadProcessMemory这个函数读取的是连续的数据,内存中可能就不是数组的形式,读出来肯定有问题的。
能力值:
( LV3,RANK:20 )
5 楼
我先写了一个简单的程序 :
float test = 1.00;
printf("%f\n",test);
getch();
test = 2.00;
printf("%f\n",test);
getch();
test = 2.1;
printf("%f\n",test);
getch();
test = 2.2;
printf("%f\n",test);
getch();
然后,用CE查ProcID和(float)test的地址(每次启动地址不一样)。
程序不要退出,因为每次启动地址不一样。
又写一个程序readprocessmemory读test的地址,没问题啊 !!
float test;
ReadProcessMemory(hProcess,(LPCVOID)0x34f8cc,&test,4,NULL);
你肯定地址没变,都是0x18A2BC???
你自己跟我一样,写简单程序测试一下。。
希望能帮上你的忙。
能力值:
( LV4,RANK:40 )
6 楼
楼上的你读的地址都是float的,当然成功
不同类型高低位不一样,存放位置和占长也不同
不过有点不懂,像&char中CPU怎么知道它的长度和结构
是通过寄存器说明还是有块表存放内存信息
能力值:
( LV4,RANK:50 )
7 楼
楼主问题没说清楚,是读取失败,还是读取成功,但float没有正确的值?
能力值:
( LV3,RANK:30 )
8 楼
写程序也先有基本的系统知识好不好?
我:
int x=12345;
char y[4]=0;
RtlMemory(y,&x,sizeof(x));
难道会失败么????
所谓数据类型,那全是给编译器看的。编译成最终的二进制机器码后,CPU只认内存地址和长度,不存在任何int,char等等数据类型。
一言以蔽之,所谓数据类型,纯粹是给人以及编译器看的,与电脑CPU半毛钱关系都没有。
能力值:
( LV7,RANK:100 )
9 楼
float型在内存中是按一定标准存储的(并不像整形那样单纯地把值存到内存里),如果你内存地址处原本的数据就符合float的存储规范,则直接读入float变量没有问题。
如果原本内容是一个int型,你想读出值后把它当float型使用,则先读入一个int型变量再作强制类型转换即可,方法如下:
int intfk;
float fltfk;
ReadProcessMemory(open, (HMODULE)(0x18A2BC), (LPVOID)&fk, 4, NULL);
fltfk = (float)intfk;
另附float存储标准(摘自
http://blog.csdn.net/adream307/article/details/7246993 ):
float一共32位,其结构定义如下: |-------- 31 -------|------------ 30-23 ------------ |------------ 22-0 ------------| 符号位(sign) 指数部分(exp) 小数部分(mag) sign:符号位就一位,0表示正数,1表示负数 exp: 指数部分,无符号正数 mag:小数部分,定点小数,小数点在最左边。 float的表达式 : pow(-1,sign) * (1+mag) * pow(2,exp-127)
能力值:
( LV3,RANK:20 )
10 楼
楼上给了漂亮和正确的答复!
赞 !
能力值:
( LV2,RANK:10 )
11 楼
@Naylon 赞一个