0

以下のコードはフロートを読み取るための例です。誰かが文字列を読み取るための関数の変更を提案できますか?

   public static float ReadPointerFloat(string EXENAME, int Pointer, int[] Offset)
 {
     float 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;
                     }
                     ReadProcessMemoryFloat((int)Handle, Pointer, ref Value, 4, ref Bytes);
                     CloseHandle(Handle);
                 }
             }
         }
         catch
         { }
     }
     return Value;
 } 

たぶんバイト配列を読んでこれを適用しますか?

ASCIIEncoding.ASCII.GetString(variableholdingresultoffunction);
4

1 に答える 1

-1
private void label2_Click(object sender, EventArgs e)
{
    Process[] test = Process.GetProcessesByName("myprocess"); //Get process base address
    int Base = test[0].MainModule.BaseAddress.ToInt32(); // ""


    int Readpointer = ReadPointerInteger("myprocess", Base, new int[3] { 0xC, 0x5, 0x6 });

    string asciiString;
    unsafe
    {
        asciiString = new string((sbyte*)Readpointer);
    }
    // use asciiString
}

他の人が述べているように、32ビットシステムと64ビットシステムの間で相互互換性があるように、ポインターIntPtrの代わりにを使用する必要がありますが、これで開始できます。int

于 2012-06-15T02:38:33.920 に答える