|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
Come viene utilizzata la memoria?
Ciao, volevo sapere una cosa particolare.
Le memorie di un processo sono suddivise in locazioni con un loro indirizzo. Ma questi indirizzi sono globali oppure ogni processo ha una memoria destinata? Se devo cambiare la locazione 00441D1E del processo pippo.exe che ha id 14B basta usare un comando che cambi la locazione 00441D1E o devo specificare il processo? Grazie. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non è un problema di facile risoluzione... Ogni applicazione ha un indirizzamento virtuale completo a 32 bit...che poi viene rimappato in memoria fisica...
Il problema è che accedere alla memoria di una ltro processo non è consentito...o meglio si può fare, non so come, ma è sicuramente molto complesso... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Cosa devi fare esattamente? Devi accedere a un particolare indirizzo fisico?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
Devo fare un trainer quindi devo accedere alla particolare locazione "00441B4c" (esempio) di un particolare processo:
pippo.exe con Id 14B... ma non so come specificare indirizzo e processo in VBasic. Ciao |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Te l'ho detto non è facile... Sotto DOS era facilissimo...ma sotto Windows diventa difficilissimo farlo...ancor più in Visual Basic...
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
e dal prompt di dos si può fare?
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Da un file per DOS è ancora più improbabile accedere alal memoria di un processo a 32 bit...
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Forse ho trovato come fare....in assembly, ma a questo punto mi dovrei tradurre tutto in chiamate in C++ e poi in Vb...
http://win32assembly.online.fr/w32_02.txt |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
Non ti chiedo così tanto!!!
Proverò a dare un occhio su Planetsourcecode. Eventualmente vi saprò dire. ciao |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Dec 2002
Messaggi: 40
|
Usa WriteProcessMemory:
http://msdn.microsoft.com/library/de...cessmemory.asp ora, non ricordo se sotto W2K/XP è necessario abilitarsi qualche privilegio, cmq in caso puoi lanciare prima il processo con CreateProcess e a quel punto dovresti essere in grado di farci un po' cosa ti pare. Ciaus ![]()
__________________
www.arialinks.com ![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
Ma sei un DIO!
Anche perchè sei fan di quella gran ![]() Ma è una funzione che c'è già dentro VBasico o devo richiamarla da Kernel? Se si come? E poi devo definire la sub tipo Define Sub.. BOOL WriteProcessMemory( HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesWritten ); Qualcosa del genere? Hai capito cosa devo mettere su LPVOID lpBaseAddress, LPCVOID lpBuffer ?? Grazie infinite! |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì...è la strada giusta... Viene usata anche nel link che ti ho postato sopra...
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
Si ho trovato qualcosa, però la strada sempre molto in salita!
Visto che il process ID è dinamico, mi devo basare sul nome del processo o il file EXE per determinare il process ID. Ma è possibile che il nome del processo su API Guide sia chiamato Class name? Oppure è un'altra cosa? Grazie,ciao |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
Sono riuscito ad entrare nel processo, ora però ho un'altro problema:
WriteProcessMemory mi chiede l'indirizzo di memoria come "pointer base address", ma cosa vuol dire? Io devo scriver sull'indirizzo 0046AFBF (Hex) come converto questo valore esadecimale dell'indirizzo in una stringa Unicode in modo che la funzione mi scriva proprio in quell'indirizzo? Grazie! Ciao |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
L'indirizzo fisico viene mappato a partire da un indirizzo logico. Lo spazio logico di un processo è consecutivo (vedilo come un array) , ma quello fisico non lo è!!
Di solito esiste un registro base che indica il punto di partenza dello spazio logico , e un offset per muoversi al suo interno (che non può superare il limite). O ancora con un sistema di paginazione (che è quello che usa WinXP), esistono delle tabelle di pagina con relativo algoritmo di traduzione in indirizzo fisico. Io non ho ancora capito come tu possa accedere ad un indirizzo fisico. E' il kernel che sceglie il tipo di mappatura, come si può conoscere tale indirizzo fisico a priori?? IlSensine che dici? |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
No, ma io non cerco l'IND fisico, quello sono cavoli del sig. Kernel.
Io voglio cambiare l'indirizzo specifico di un processo particolare, esempio "pippo.exe". Ho ricavato l'handle a questo processo, ora però devo scrivergli in memoria. Avevi capito male (o mi sono spieg male) o la tua perplessità rimane(e quindi non si può..)? |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Fammi capire: tu vuoi assegnare a un processo un dato spazio di indirizzi fisici, un po' come i .com del DOS? Ovvero con binding degli indirizzi in fase di compilazione?
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
No, devo fare un trainer. Quindi devo modificare una variabile di un programma. L'allocazione non è fisica, è riferita al processo.
Se il processo ha l'allocaz da 000000 a FFFFFFF (che fisicamente sarà dove sarà...) io voglio cambiare il valore di alcuni byte di questa memoria. Precisamente la locaz 0046AFBF ma non è la posizione assoluta in memoria, ma è quella assegnata al processo che voglio io. Capisci? Quello che volevo sapere in soldoni è se quando uso: WirteProcessMemory (handle,address,bufferDaMandare,Flase,Null) quel Address che è definito come Long può essere ricollegato all'indirizzo di memoria relativo al processo. Esempio se il long è: 0000000000000000 (Long Dex) è assegnato all'indirizzo 000000 (Hex) Se il long è 0000000000000015 è assegnato all'indirizzo 00000F. O comunque se c'è un modo per capire questo paramento decide l'indirizzo. Grazie ancora per la pazienza.Ciao |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ricordati che la scrittura funziona solamente se l'area di memoria è accessibile in scrittura...
Comunque dai un'occhiata qui, c'è scritto ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:01.