[C#] Addresse aus Pointer auslesen

10/22/2012 22:18 .NoThx#1
Hey leute, wie kann ich aus einem Pointer die addresse auslesen ?
10/22/2012 23:15 bammes#2
Nabend,

bin mir jetzt echt nicht sicher, aber ich denke, dass es passt.

Quote:
int x = 10;

MessageBox.Show(((IntPtr)(&x)).ToString());
PS: der unsichere Modus (Msdn unsafe) muss aktiviert sein.

jou noch getestet:

Quote:
int x = 10;
IntPtr ptr = (IntPtr)(&x);
int y = *(int*)ptr;
MessageBox.Show(y.ToString());
ausgabe ist y=10.
10/23/2012 00:02 .NoThx#3
Hmm Das Klappt nicht so, ich möchte aus dem Pointer die Addresse, hier mal der code, wie er zwar nciht geht aber im ansatz irgendwie richtig sein sollte:
Code:
        [Flags]
        public enum ProcessAccessFlags : uint
        {
            All = 0x001F0FFF,
            Terminate = 0x00000001,
            CreateThread = 0x00000002,
            VMOperation = 0x00000008,
            VMRead = 0x00000010,
            VMWrite = 0x00000020,
            DupHandle = 0x00000040,
            SetInformation = 0x00000200,
            QueryInformation = 0x00000400,
            Synchronize = 0x00100000
        }

        [DllImport("kernel32.dll")]
        private static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);

        [DllImport("kernel32.dll")]
        public static extern Int32 CloseHandle(IntPtr hProcess);

	
        public static byte[] ReadMemory(Process process, int address, int numOfBytes, out int bytesRead)
        {
            IntPtr hProc = OpenProcess(ProcessAccessFlags.All, false, process.Id);
 
            byte[] buffer = new byte[numOfBytes];
 
            ReadProcessMemory(hProc, new IntPtr(address), buffer, numOfBytes, out bytesRead);
            return buffer;
        }
        public static bool WriteMemory(Process process, int address, long value, out int bytesWritten)
        {
            IntPtr hProc = OpenProcess(ProcessAccessFlags.All, false, process.Id);

            byte[] val = BitConverter.GetBytes(value);

            bool worked = WriteProcessMemory(hProc, new IntPtr(address), val, (UInt32)val.LongLength, out bytesWritten);

            CloseHandle(hProc);

            return worked;
        }
private unsafe void button5_Click(object sender, EventArgs e)
        {
            
                Process process = Process.GetProcessesByName("metin2.bin").FirstOrDefault();
                int address = 0x47D8D78A;

                int bytesRead;
                byte[] valuee = ReadMemory(process, address, 4, out bytesRead);
                //int x = 0x47D8D78A;

                int value = BitConverter.ToInt32(valuee, 0);

                int bytesWritten;
                
                WriteMemory(process, address, value, out bytesWritten);
            
            
        }
10/23/2012 12:35 bammes#4
Hm sry mit sowas kenn ich mich net aus
10/23/2012 17:24 MoepMeep#5
Code:
button5_Click
dafug.

Bisher hast du ja fein kopierten Code, da du allerdings nichtmal weißt was ein Pointer überhaupt ist, wird er dir nichts bringen. Und wo ist bitte dein error-handling?
10/23/2012 17:41 .NoThx#6
Quote:
Originally Posted by MoepMeep View Post
Code:
button5_Click
dafug.

Bisher hast du ja fein kopierten Code, da du allerdings nichtmal weißt was ein Pointer überhaupt ist, wird er dir nichts bringen. Und wo ist bitte dein error-handling?


Also, warum sollte ich den bitte jeden button umbennen, wobei ich, da ich aj neuanfangen muss das auch jetzt getan habe, um zuwissen welcher button welcher genau ist :)

Pointer sind Zeiger die auf Addressen im arbeitsspeicher zeigen :)

Und mein Code soll erstmal funktionieren, das programm soll ja auchnciht Public gemacht werden :)
10/25/2012 19:32 vwap#7
Quote:
Originally Posted by .NoThx View Post
Also, warum sollte ich den bitte jeden button umbennen
Weil das zu einer ordentlichen und sauberen Programmierung dazugehört?
Denk dir mal, jemand anders soll deinen Code überprüfen, warten, o.Ä..
10/30/2012 18:01 Naworia#8
Actually I don't support C# to accessing to processes :D

You can use C++