我已經提出了一種方法,通過提供所需的偏移量+起始地址來讀取多指針。 (代碼如下)。總結一下,我試圖精簡這個方法,下面我會解釋我的問題。C#簡化多指針內存讀取
我一直在與轉換鬥爭。該參數是一個IntPtr和讀取地址的輸出是一個字節數組,我的第一個想法是:「將字節數組轉換爲IntPtr,重新處理它,最後將最後一個讀取的地址轉換爲int32(由於最後一個地址不是指針它永遠不會被讀取,所以轉換到Int32應該是好的)「,
但是,這並沒有給出好的結果。所以目前我堅持將Byte數組轉換爲Int32,然後將Int32轉換爲IntPtr的解決方案。人們會說bit轉換器是一種壞方法,因爲它可能會在64位平臺上引發問題,我也相信有一種方法可以提供更好的性能(因爲Im將對象轉換爲2次)。
最後,如果有人認爲有可能在C++中做類似的功能,然後P /在C#中調用它(我想這樣會更有效率?)請告訴我。 (我試着去適應我的編程知識,而且找到的語言非常有趣的組合)
[DllImport("kernel32.dll", EntryPoint = "ReadProcessMemory")]
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
[In, Out] byte[] buffer, Int32 sizeout, out IntPtr lpNumberOfBytesRead);
public Int32 ReadBytes(IntPtr Handle, IntPtr Address, int[] Offsets, int BytesToRead = 4)
{
IntPtr ptrBytesRead;
byte[] value = new byte[BytesToRead];
ReadProcessMemory(Handle, Address, value, BytesToRead, out ptrBytesRead);
//Read Offsets
for (int i = 0; i < Offsets.Length; i++)
{
ReadProcessMemory(Handle,
new IntPtr(BitConverter.ToInt32(value, 0) + Offsets[i]),
value,
BytesToRead,
out ptrBytesRead);
}
return BitConverter.ToInt32(value, 0);
}
任何想法,以簡化這個方法會非常好感激!先謝謝了!
有沒有比「改善這個」更具體的問題?此外,ReadProcessMemory將是迄今爲止最慢的部分。所有的「轉換」對perf都無關緊要。 – usr
這當然是真的!非常感謝答覆!不,我不這麼認爲。至少現在不行。 – LamaCoder