Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Address Finder...
Forum - C# / VB.NET - Address Finder... - Pagina 3

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:57
Martedì, 14/10/2008
Il quarto parametro di ReadMemory è un puntatore a intero. Durante il processo di lettura, la funzione pone nell'indirizzo puntato da quel puntatore un valore intero che rappresenta il numero di bytes letti. Leggendo il valore della cella di memoria referenziata da Read si legge quindi il numero di bytes letti.

PM Quote
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 17:01
Martedì, 14/10/2008
aaaaah! ho capito! ma se io invece devo leggere dentro un address? come faccio? grazie per l'aiuto

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:07
Mercoledì, 15/10/2008
Per leggere la memoria devi conoscere l'indirizzo. Per leggere quello che è contenuto in quell'indirizzo, il discorso è un po' più complicato. Ci sono tre casi, fondamentalmente:

- L'indirizzo di memoria puntato contiene un tipo base: in questo caso, ti basta richiamare le funzioni Marshal.Read... per leggere un tipo numerico, oppure Marshal.PtrToString... per leggere una stringa.
- L'indirizzo di memoria punta a una struttura: nelle strutture, i campi vengono scritti sequenzialmente, quindi dovresti leggere dall'indirizzo specificato un dato numero di byte alla volta e porli in ogni campo. Oppure, più semplicemente, potresti usare Marshal.PtrToStructure
- L'indirizzo di memoria punta a una classe: nella classi i campi non vengono scritti sequenzialmente, quindi dovresti ottenere l'offset di ognuno nella memoria con la funzione Marshal.OffsetOf e leggerlo separatemente

Ogni metodo citato è documentato qui:
http://msdn.microsoft.com/en-us/library/system.runtime.int ...

PM Quote
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 20:48
Mercoledì, 15/10/2008
ahahahah ti AMOOOOO grazie di tutto!:rotfl::rotfl::rotfl: ora non mi resta ke studiarmi tutta la classe marshall...


cmq voglio farti notare 1 cosa a me se imposto

ReadProcessMemory(Handle, BaseAddress, BufferPtr, Buffer.Length, READ)

mi da fuori 0 sempre

se invece

ReadProcessMemory(Handle, BaseAddress, BufferPtr, Buffer.Length, READBytes)

mi esce fuori qualcosa diverso dallo 0

sto "lavorando" bene o no?
secondo me no, perche ho provato a fargli leggere lo stesso address 2 vlt di fila senza kiudere il processo ke leggevo e mi sono usciti 2 valori diversi!
quindi posso kiederti di farmi un esempio per la
funzioni Marshal.Read? vorrei cercare 1 intero 4 bytes...

ps, hai un modo per farlo scansionare piu velocemente????? tytyty per tutto comunque!:D

Ultima modifica effettuata da gianluca il 16/10/2008 alle 20:14
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:40
Giovedì, 16/10/2008
Codice sorgente - presumibilmente VB.NET

  1. Dim BaseAddress As IntPtr = P(0).MainModule.BaseAddress
  2. 'INUTILE
  3. Dim BaseAddressIntPassaggio As Integer = BaseAddress
  4. 'INUTILE
  5. Dim BaseAddressInt As Integer = Hex(BaseAddressIntPassaggio)
  6. 'INUTILE
  7. Label2.Text = "&H" & Hex(BaseAddressInt)
  8. 'Bastava:
  9. Label2.Text = "&H" & Hex(BaseAddress.ToInt32)
  10.  
  11. Dim Buffer(P(0).NonpagedSystemMemorySize64 - 1) As Byte
  12. Dim GH As GCHandle = GCHandle.Alloc(Buffer, GCHandleType.Pinned)
  13. Dim BufferPtr As IntPtr = GH.AddrOfPinnedObject()
  14. 'Integer ha dimensione di 4 bytes, non di 8
  15. Dim Read As IntPtr = Marshal.AllocHGlobal(4)
  16.  
  17. 'INUTILE: basta usare P(0).Handle
  18. Dim processHandle As IntPtr = OpenProcess(BaseAddressInt, 0, P(0).Id)
  19. 'NON VA MESSO QUI
  20. Dim ReadBytes As Int32 = Marshal.ReadInt32(Read)
  21. 'A cosa ti serve calcolare BaseAddress se poi qui usi comunque l'indirizzo che vuoi tu?
  22. Dim ReadProcess As String = ReadProcessMemory(processHandle, Address, BufferPtr, Buffer.Length, Read)
  23.  
  24. 'Ma qui:
  25. Dim ReadBytes As Int32 = Marshal.ReadInt32(Read)
  26.             RichTextBox2.Text = RichTextBox2.Text & ReadProcess & vbNewLine
  27.             RichTextBox1.Text = RichTextBox1.Text & (Read).ToString & vbNewLine


La metà del codice che hai scritto è inutile.
A cosa ti serve il parametro Address se ti ricavi il processo con GetProcessesByName? O l'uno o l'altro.

PM Quote
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 20:29
Giovedì, 16/10/2008
:k:ahahaha! hai ragionissimo, cmq un po di quelle cs inutili le ho scritte perke nn sapevo "ridurle", altre per "provare" ke succedeva, ed altre xke nn ci sto capendo nulla!
cmq ho scoperto una cosa...

Codice sorgente - presumibilmente VB.NET

  1. Public Function ReadLong(ByVal Address As Integer)
  2.         Dim ProcessLookUp As Process() = Process.GetProcessesByName("PROCESSO")
  3.         If ProcessLookUp.Length = 0 Then
  4.             End
  5.         End If
  6.         Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, ProcessLookUp(0).Id)
  7.         ReadProcessMemory(processHandle, Address, RBuff, 4, Nothing)
  8.         CloseHandle(processHandle)
  9.         Return RBuff
  10.     End Function



ke era quello ke usavo per warrock in vista lo da come errato, ma per xp è OK! quindi è possibile ke l'errore ke mi da ancora in:
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim ReadBytes As Int32 = Marshal.ReadInt32(Read)



Tentativo di lettura o scrittura della memoria protetta. Spesso questa condizione indica che altre parti della memoria sono danneggiate.

puo essere una cs in Vista! sai come può essere "aggirata"?
cmq ora è cs!


gianluca ha allegato un file: addressLogger.zip (122987 bytes)
Clicca qui per scaricare il file
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:55
Venerdì, 17/10/2008
No, avevo già tentato ma senza successo.

P.S.: quella linea è sempre nel posto sbagliato.

Ultima modifica effettuata da Il Totem il 17/10/2008 alle 17:56
PM Quote
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 1:21
Sabato, 18/10/2008
boh, si vede ke nn ci arrivo!
cmq ci ho rinunciato dato ke il ReadProcessMemory in vista non funziona!
e nn ne capisco il motivo!

ps, è l'unico modo questo? se ne conosci un altro mi daresti una mano, o anke solo un metodo ke poi mi cerco le soluzioni da solo...

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo