2015-06-07 37 views
0

我發現這個功能在互聯網上:修改函數讀取浮動C#

[DllImport("kernel32.dll")] 
public static extern bool ReadProcessMemory(IntPtr hProcess, int lpBaseAddress, byte[] buffer, int size, int lpNumberOfBytesRead); 



    public static int ReadAddress(string Process_Name, string Address_Offsets) 
    { 
     Process[] P; 
     if ((P = Process.GetProcessesByName(Process_Name)).Length == 0) return -1; 
     int Addy = -1; 
     while (Address_Offsets.Contains(" ")) 
      Address_Offsets = Address_Offsets.Replace(" ", " "); 

     int Index = -1; 
     while ((Index = Address_Offsets.IndexOf("0x", StringComparison.OrdinalIgnoreCase)) != -1) 
      Address_Offsets = Address_Offsets.Replace(Address_Offsets.Substring(Index, 2), ""); 

     string[] tmp = Address_Offsets.Split(' '); 
     if (tmp[0].Contains("+")) 
     { 
      string[] AD = tmp[0].Split('+'); 
      foreach (ProcessModule M in P[0].Modules) 
       if (M.ModuleName.ToLower() == AD[0].ToLower()) 
        Addy = M.BaseAddress.ToInt32() + int.Parse(AD[1], NumberStyles.HexNumber); 
     } 
     else Addy = int.Parse(tmp[0], NumberStyles.HexNumber); 

     if (tmp.Length == 1) return Addy; 
     byte[] buff = new byte[4]; 
     ReadProcessMemory(P[0].Handle, Addy, buff, 4, 0); 
     Addy = BitConverter.ToInt32(buff, 0); 
     for (int i = 1; i < tmp.Length; i++) 
     { 
      int Off = int.Parse(tmp[i], NumberStyles.HexNumber); 
      ReadProcessMemory(P[0].Handle, Addy + Off, buff, 4, 0); 
      Addy = i != (tmp.Length - 1) ? BitConverter.ToInt32(buff, 0) : Addy += Off; 
     } 
     return Addy; 
    } 

我是用這樣的:

ReadAddress("solitaire", "solitaire.exe+97074 2c 10"); 

此功能良好的閱讀整數。但我想閱讀花車。 有人告訴我,我必須做的

ReadProcessMemory(P[0].Handle, Addy, buff, 4, 0); // after you dereference all pointers and get the final "desired" value. 
Addy = BitConverter.ToSingle(buff, 0); // ToSingle converts value to float. 

但我不明白的地方把自己的推薦代碼的功能。有人可以幫我嗎? D提前:D。

回答

1
int dataRead = ReadAddress("solitaire", "solitaire.exe+97074 2c 10"); 

給你(希望)在int 4個字節。

你讀過這int後,你需要將其轉換爲浮動,這意味着

byte[] bytesOfTheNumber = BitConverter.GetBytes(dataRead); 

的整數轉換成字節數組,然後再

float theFloatYouWant = BitConverter.ToSingle(bytesOfTheNumber, 0); 

使用字節數組獲取float