vb 用ReadProcessMemory遍历内存输出数据类型的问题
正用vb写一个遍历内存的工具, 要把ReadProcessMemory读取到的内存数据显示出来, 但是不知道最终数据是什么类型, 类型可能是整数/单浮点/双浮点, 难道每个内存地址要读取3次才能把数据正确显示出来吗?能不能一个地址只读一次. 然后转换成各种类型显示出来.
- VB code
Dim BaseAddress As LongDim adata As LongDim bdata As SingleDim cData As DoubleBaseAddress = &H8B3EB8ReadProcessMemory hProcess, ByVal BaseAddress, adata, 4, 0&ReadProcessMemory hProcess, ByVal BaseAddress, bdata, 4, 0&ReadProcessMemory hProcess, ByVal BaseAddress, cdata, 8, 0&
上面这段代码一个地址要读三次才能把数据以3种类型显示出来, 能不能只读一次, 然后将其转换成这3种类型。
[解决办法]
个人理解,内存的数据永远都是Byte类型的,你单单通过读内存地址就想确定数据类型是不可能的。
VB的数据类型是由编译器来分配地址的,比如Long类型的,它会分配4个字节给它,但对你而言,你是无法确知那四个字节是一个Long类型的变量的地址。但如果你知道了,通过组合就可以得到变量的值了。
参阅这个
[解决办法]
Dim BaseAddress As Long
Dim adata As Long
Dim bdata As Single
Dim cData As Double
BaseAddress = &H8B3EB8
ReadProcessMemory hProcess, ByVal BaseAddress, Byval VarPtr(adata), 4, 0&
ReadProcessMemory hProcess, ByVal BaseAddress, Byval VarPtr(bdata), 4, 0&
ReadProcessMemory hProcess, ByVal BaseAddress, Byval VarPtr(cdata), 8, 0&