none
关于利用ReadProcessMemory 读取内存内数值出值后转值的问题 RRS feed

  • 问题

  •  

    小弟参考了 MSDN论坛不少关于ReadProcessMemory 读取值出来的观念和手法  

    也依样画葫芦自己照做了一次  但我发现这个API取值出来后的后段处理  有点搞不太懂

    所以特来发文请教各位大大

    首先这个API 我用了两种不同的宣告方法 :

    Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByVal pBuffer() As Byte, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer

    Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesRead As Integer) As Integer

     

    当然这两种宣告方法实际测试后是可以使用的  也是我寻找网络上的信息后汇整确认可以使用的

    但是使用这两种不同的宣告 我试着要将他传出来的值转成浮点数 就发现了问题

    1.

    Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByVal pBuffer() As Byte, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer

                Dim b(3) As Byte

                ReadProcessMemory(hProcess, &HBD1A88, b, 4, bytesRead)

             Me.Label2.Text = "监看数据int32:" & BitConverter.ToInt32(b, 0)

               Me.Label1.Text = "监看数据浮点数:" & (BitConverter.ToSingle(b, 0))

     

          

    label2跑出来的数据是  1132390609      lebel1跑出来的数据是 254.9094   这个没有问题是我要的数据

    但是用第二个API重新宣告再测试一次

    2.

    Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesRead As Integer) As Integer

    Dim b As integer

      ReadProcessMemory(hProcess, &HBD1A88, b, 4, bytesRead)

       Me.Label2.Text = "监看数据int32" & b

      Me.Label1.Text = "监看数据浮点数:" & CSng(b)

     

    label2跑出来的数据是  1132390609  跟上面一样   lebel1跑出来的数据却是1.132391E+09

    为什么会这样呢?   明明都是转换成浮点数  为什么下面这种一样转成浮点数 为什么会变成这样呢?

    我要lebel1的数据结果是跟上面那个浮点数的结果才是我要的  这里是哪里有问题呢?  该如何修改..

     

    2012年11月2日 13:12

全部回复