1

私はreadprocessmemoryクラスを使用しており、マルチレベル ポインターを読み取り、label2.text の最終アドレスに整数を表示するために動作するようになりました。

これは、ベースアドレスを指定する場所で機能します (以下では「0x40000」として示されています)。

private void label2_Click(object sender, EventArgs e)
    {
        int Readpointer = Trainer.ReadPointerInteger("runningprocess", 0x40000, new int[3] { 0x3, 0x4, 0x10 });
        string converted = Readpointer.ToString();
        label2.Text = converted;

ベースアドレス「40000」を指定する代わりに、関数を使用してプロセスのベースアドレスを「見つけ」、それを変数に格納し、代わりにそれをパラメーターとして渡したいと思いました。これは最初の部分を行います:

        Process[] test = Process.GetProcessesByName("runningprocess"); //Get process base address
        int Base = test[0].MainModule.BaseAddress.ToInt32(); // ""

残念ながら、"Trainer.ReadPointerInteger"関数には "0x40000" の形式の baseaddress パラメータが必要です。だから私はこれをしました:

        string BaseAddress = "0x" + Addr.ToHex(Base); // addr.ToHex is just another function which converts the int to hex.

ここで、変数を2番目のパラメーターに渡したいと思い、ReadPointerInteger'sこれを試しました:

        int Readpointer = Trainer.ReadPointerInteger("runningprocess", BaseAddress, new int[3] { 0x3, 0x4, 0x10 });
        string converted = Readpointer.ToString();
        label2.Text = converted;

これは機能するはずですが、問題 (エラー) は、「Trainer」関数の 2 番目のパラメーターが Int であることです。 Int としての文字。とにかく、私はここで立ち往生しており、誰かが Int/String 問題を回避する方法を指摘できるのだろうか?

参考までに、ReadPointerIntegerクラスは次のとおりです。

public static int ReadPointerInteger(string EXENAME, int Pointer, int[] Offset)
{
    int Value = 0;
    checked
    {
        try
        {
            Process[] Proc = Process.GetProcessesByName(EXENAME);
            if (Proc.Length != 0)
            {
                int Bytes = 0;
                int Handle = OpenProcess(PROCESS_ALL_ACCESS, 0, Proc[0].Id);
                if (Handle != 0)
                {
                    foreach (int i in Offset)
                    {
                        ReadProcessMemoryInteger((int)Handle, Pointer, ref Pointer, 4, ref Bytes);
                        Pointer += i;
                    }
                    ReadProcessMemoryInteger((int)Handle, Pointer, ref Value, 4, ref Bytes);
                    CloseHandle(Handle);
                }
            }
        }
        catch
        { }
    }
    return Value;
}
4

1 に答える 1

2

0x40000 は、整数 262144 の単なる別の名前です。これは、「0x」を含む文字列ではありません。これは、基数 16 が基数 10 よりもわかりやすい場合に使用する、整数を書き込むための代替構文です。特に、次のことは当てはまりません。

「Trainer.ReadPointerInteger」関数には、「0x40000」の形式の baseaddress パラメータが必要です。

アドレスは通常16進数で書かれているだけです。

于 2012-06-14T23:47:20.603 に答える