|
|
|
![]() |
|
Strumenti |
![]() |
#21 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
me sono già riuscito a scrivere (la funzione mi restituisce "1" quindi..penso di aver il permesso) il problema è che non so dove ho scritto!!!
Non so perchè io ho i riferimenti in HEX (come tutti gli indirizzi di mem) mentre la funzione accetta un long... che è definito come lpBaseAddress [in] Pointer to the base address in the specified process to which data will be written. Before any data transfer occurs, the system verifies that all data in the base address and memory of the specified size is accessible for write access. If this is the case, the function proceeds; otherwise, the function fails. Cosa devo fare per metterci dentro l'HEx che ho io? |
![]() |
![]() |
![]() |
#22 |
Member
Iscritto dal: Dec 2002
Messaggi: 40
|
Allora,
premetto che non so nulla di Visual Basic quindi se ho scritto qualche cacchiata perdonami :-) in lpBaseAddress ci devi mettere appunto l'indirizzo di base da dove iniziare a scrivere (come diceva giustamente cionci), scrivilo pure in "HEX", l'Hex non è altro che una notazione, che tu scriva in hex[esadecimale] o in decimale è indifferente. lpBuffer è l'indirizzo di memoria dove la funzione va a leggere i byte che vuoi scrivere nSize il numero di byte che vuoi scrivere lpNumberOfBytesWritten il numero di byte che WriteProcessMemory ha scritto (puoi anche non passarlo) Ciao
__________________
www.arialinks.com ![]() |
![]() |
![]() |
![]() |
#23 | ||
Member
Iscritto dal: Dec 2002
Messaggi: 40
|
Quote:
__________________
www.arialinks.com ![]() |
||
![]() |
![]() |
![]() |
#24 |
Member
Iscritto dal: Dec 2002
Messaggi: 40
|
Mi sono auto quotato.. ehm
![]() ![]()
__________________
www.arialinks.com ![]() |
![]() |
![]() |
![]() |
#25 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
Mi dispiace alquanto, ma non mi risulta!
Almeno con il programma che ho io per vedere la memoria dei processi non sono riuscito a vedere nessun cambiamento nell'indirizzo che mi sono inserito. Tra l'altro il valore in Hex io l'ho inserito come Stringa (TExtBox) come fa lui a capire che quello è un val in Hex? Anche se converto l'Hex in Decimale e poi lo butto dentro non funziona. Non è che per caso lui accetta stringhe, long, di tutto come indirizzo e poi le converte tutte in un numero? Grazie |
![]() |
![]() |
![]() |
#26 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Devi convertire la stringa in numero... Questo senza dubbio... Altrimenti non ti funziona una cippa... HEX o dec non conta niente (basta usare l'opportuna notazione), basta convertire la stringa in numero...
|
![]() |
![]() |
![]() |
#27 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
Raga sono riuscito a vedere qualcosa, però non ci capisco molto.
vi descrivo quello che ho fatto: Siccome il parametro Address deve essere scritto in Unicode ho dovuto convertire prima la Stringa dell'address: indirizzoPerFunzione = StrPtr(indirizzoLetto) Dopo l'ho buttata dentro la funzione e mi sono fatto restituire in MsgBox questo: MsgBox CLng(indirizzoPerFunzione) Ho convertito il valore numerico in Hex e ho guardato nella locaz relativo e... è cambiata!!! Ora il mio problema è: Questo StrPtr che è OBLIGATORIO (ho provato ad ometterlo e non va più la funzione), mi scombina tutto perchè come paramentro vuole solo stringhe e quindi quando butto dentro un numero DEc 124513 lui me lo converte in Stringa con consegente alterazione del valore! Come faccio a scrivere un valore in Unicode senza usare StrPtr? Esiste una funzione inversa? Grazie PS: Ho provato anche a fare: Text1.text = StrPtr("Ciao Mondo!") E ogni volta text1 cambia valore (continuano ad alternarsi 3 valori) Che cos'è? Ultima modifica di beog : 04-06-2004 alle 09:44. |
![]() |
![]() |
![]() |
#28 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Con un po' di fantasia non ci voleva tanto a farsela la funzioen
![]() Codice:
Function Hex2Dec(txt As String) Dim base As Long base = 1 Hex2Dec = 0 For i = Len(txt) To 1 Step -1 If Mid(txt, i, 1) = "A" Or Mid(txt, i, 1) = "a" Then Hex2Dec = Hex2Dec + base * 10 ElseIf Mid(txt, i, 1) = "B" Or Mid(txt, i, 1) = "b" Then Hex2Dec = Hex2Dec + base * 11 ElseIf Mid(txt, i, 1) = "C" Or Mid(txt, i, 1) = "c" Then Hex2Dec = Hex2Dec + base * 12 ElseIf Mid(txt, i, 1) = "D" Or Mid(txt, i, 1) = "d" Then Hex2Dec = Hex2Dec + base * 13 ElseIf Mid(txt, i, 1) = "E" Or Mid(txt, i, 1) = "e" Then Hex2Dec = Hex2Dec + base * 14 ElseIf Mid(txt, i, 1) = "F" Or Mid(txt, i, 1) = "f" Then Hex2Dec = Hex2Dec + base * 15 Else Hex2Dec = Hex2Dec + base * CLng(Mid(txt, i, 1)) End If base = base * 16 Next End Function Private Sub Command1_Click() Dim v1 As Long v1 = Hex2Dec(Text1.Text) Text2.Text = "" & v1 End Sub |
![]() |
![]() |
![]() |
#29 |
Senior Member
Iscritto dal: Apr 2001
Messaggi: 850
|
Ma la funzione inversa a StrPtr non per l'Hex!
Cmq la funzione inversa prob non esiste... resta che io sto StrPtr non lo capisco! Sono riuscito a imbroccare l'indirizzo... ora come cambiarlo? Provando a fare così: WriteProcessMemory (processHandle, Indirizzo(Long), stringaDaScrivere(Long), 6, vbNullString) mi cambia le 6 locazioni (giustamente) ma però se io su stringaDaScrivere gli do "0" (poi la converte con CLng) Dovrebbe darmi "00 00 00 00 00 00" invece non cambia niente! Se invece io cambio la dichiarazione della stringa con: stringaDaScrivere = Clng(StrPtr(TExt3.text)) allora mi scrive dei valori (non 0, valora che non so da cosa derivino!) controllando poi il valore long di StringadaScrivere vedo che ha valori tipo 1314421 (7 cifre) e sempre tra 1300000 e 1400000 se scrivo altri valori (anche inferiori) la mappatura della memoria resta invariata! I valori variano solo se metto numeri così alti... anche se cambio il numero di bit da scirivere? PERCHE'? Veramente io non capisco perchè con StrPtr cambi qualcosa altrimenti non funzia. Illuminatemi ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:19.