2013-04-16 45 views
4

我知道有很多教程向您展示如何使用「ProcessMemoryReader」函數。但是這個問題似乎是獨特的或者還沒有解決。C#指針偏移量> 255 - ProcessMemoryReader

很長一段時間以來,我一直在挖掘其他人的代碼,以找到使用多個偏移的方法。 我認爲使用多個偏移對我來說是個問題,但我認爲這是一個問題,因爲我的偏移值大於255。

我試圖從內存值中獲取內存值「突擊立方體」。 由於我不確定我是否得到正確的偏移值,我搜索了其他人得到的結果。 他們似乎是一模一樣的: http://cheatengine.org/tables/moreinfo.php?tid=1142(您可以用記事本文件.CT如果你沒有安裝作弊引擎有做的。)

這裏是我的代碼,使用ProcessMemoryReader.cs

private void timer1_Tick(object sender, EventArgs e) 
{ 
int bytesread; 
int pointerbase; 
byte[] memory; 
Process[] myprocess = Process.GetProcessesByName("ac_client"); 
if (myprocess.Length != 0) 
{ 
preader.ReadProcess = myprocess[0]; 
preader.OpenProcess(); 

//Ammo 
memory = preader.ReadProcessMemory((IntPtr)0x4DF73C, 4, out bytesread); 
pointerbase = BitConverter.ToInt32(memory, 0); 
pointerbase += 0x00; //0 // 14 // 378 

byte[] memory1 = preader.ReadProcessMemory((IntPtr)pointerbase, 4, out bytesread); 
int pointerbase1 = BitConverter.ToInt32(memory1, 0); 
pointerbase1 += 0x14; //0 // 14 // 378 

byte[] memory2 = preader.ReadProcessMemory((IntPtr)pointerbase1, 4, out bytesread); 
int pointerbase2 = BitConverter.ToInt32(memory2, 0); 
pointerbase2 += 0x378; //00 // 14 // 378 

byte[] memory3 = preader.ReadProcessMemory((IntPtr)pointerbase2, 4, out bytesread); 
int valueis = BitConverter.ToInt32(memory3, 0); 
label1.Text = valueis.ToString(); 
} 

雖然有一個指針的過程中正常工作,例如:

//HP 
memory = preader.ReadProcessMemory((IntPtr)0x4DF73C, 4, out bytesread); 
pointerbase = BitConverter.ToInt32(memory, 0); 
pointerbase += 0xf4; 

byte[] memory1 = preader.ReadProcessMemory((IntPtr)pointerbase, 4, out bytesread); 
int valueis = BitConverter.ToInt32(memory1, 0); 
label2.Text = valueis.ToString(); 

這樣的作品,這是非常直截了當這裏發生了什麼,但我想不出如何閱讀彈藥代碼與多個偏移量。

+1

ReadProcessMemory()沒有這樣的限制。在第二個片段中,您正在讀取一個指向整數的指針。這很簡單。在第一個片段中,您正在讀取指向指向整數指針的指針。這並不簡單。一個小錯誤,你會閱讀垃圾。 –

回答

0

我不熟悉CheatEngine和它的表格格式,但我沒有得到它指向您正在使用的內存地址的印象。

您讀取4個字節0x4DF73C,它被用作下次讀取的新內存地址。這是重複了幾次。基本上,您正在從指向指向指針的指針讀取信息。你確定這是預定的嗎?

沒有任何理由偏移值大於255會成爲問題。