7

正しいものを取得する私のバージョンbaseaddressが間違っていることに気付きました

Process[] iexp = Process.GetProcessesByName("Solitaire");
if (iexp.Length == 0) {
    //EXIT
}
Process internet = iexp[0];
uint baseAddress = (uint)internet.MainModule.BaseAddress.ToInt64();

しかし、それbaseaddressは間違っています

MSDNも調べましたが、このコードは非常に奇妙で、無限ループが発生します。

例が見つからないので、助けていただければ幸いです。

編集 :

 ReadProcessMemory(readHandle, ((IntPtr)(((baseAddress) + 0x14) + 0x50)), bytes, (UIntPtr)4, ref rw);

ここでは、デスクトップのイメージを作成しました。私は本当に混乱しています。誰かが私がどこで間違いを犯したか知っているかもしれません。 http://i.stack.imgur.com/50lva.jpg

4

1 に答える 1

2

あなたが欲しいと思うものが欲しいなら、私はそれを行うためのいくつかの方法しか考えられませんが、それらのどれも.NET組み込みではありません...

  1. P/Invoke を使用して、スタートアップ実行可能ファイルのベース アドレスを返します。

    [DllImport("kernel32.dll")]
    public static extern IntPtr GetModuleHandle(string lpModuleName);
    
  2. MyClass を含む実行可能ファイルのベース アドレスを返します

    Marshal.GetHINSTANCE(typeof(MyClass).Module)
    
  3. 以下を使用して、現在のモジュールへのハンドルを返します。

    Marshal.GetHINSTANCE(this.GetType().Module)
    
于 2011-11-29T22:50:21.830 に答える