Domanda

Possibile duplicato:
Come ottenere IntPtr da byte[] in C#

Sto leggendo le stringhe dalla memoria con

byte[] array = 
reader.ReadProcessMemory((IntPtr)address, (uint)255, out bytesReadSize);

e poi sto convertendo questo array in stringa.

Ora ho un problema perché sotto l'indirizzo 003A53D4 nella memoria del programma c'è un puntatore che punta a una stringa.Come posso ottenere l'indirizzo della stringa?Grazie :)

ECCO COSA HO PROVATO:

IntPtr pointers_address = new IntPtr(module_base_address + 3822548);
byte[] pointer_arrays = 
reader.ReadProcessMemory(pointers_address, (uint)16, out bytesReadSize2); 
IntPtr pointer_for_string = new IntPtr();
Marshal.Copy(pointers_array, 0, pointer_for_string, 16);

Dice (circa la quarta riga):

Il valore non può essere nullo.Nome del parametro:destinazione

e quando cambio nuovo IntPtr() a nuovo IntPtr(1)dice

Tentativo di leggere o scrivere nella memoria protetta.Questo è spesso un'indicazione che altri memoria sono corrotti.

È stato utile?

Soluzione

Puoi usare un Encoding.GetString() per convertire i byte in una stringa.La codifica da utilizzare dipende dalla codifica della stringa, ad es.Encoding.UTF8.GetString(pointer_arrays, 0) per la codifica UTF8, Encoding.Unicode per unicode, Encoding.ASCII per ASCII o Encoding.Default per la code page predefinita del sistema.

Altri suggerimenti

Il modo migliore (IMO) è il seguente:

GCHandle pinned = GCHandle.Alloc(array , GCHandleType.Pinned);
IntPtr address = pinned.AddrOfPinnedObject();
reader.ReadProcessMemory(address, (uint)255, out bytesReadSize);
pinned.Free();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top