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/C++ - accesso a memoria, cosa sbaglio?
Forum - C/C++ - accesso a memoria, cosa sbaglio?

Avatar
tiz85 (Normal User)
Newbie


Messaggi: 3
Iscritto: 11/07/2010

Segnala al moderatore
Postato alle 13:58
Domenica, 11/07/2010
Ciao a tutti, sono nuovo nel forum. Sto cercando di scrivere un semplice programma C perché mi serve di accedere ad una data locazione di memoria e modificarne i valori. La locazione di memoria che voglio accedere è parte della memoria assegnata ad uno shockwave eseguito dentro un broser e, tramite un altro programma, trovo l'indirizzo preciso ed il valore (numero non decimale) corrente della locazione che mi serve. Supponiamo che l'indirizzo della locazione cercata sia 0323A9E0 e che tale locazione contenga il valore 3, effettuo la conversione da esadecimale a decimale dell'indirizzo ed ottengo il numero 52668896, quindi scrivo il seguente programma C:

main()
{
      int a = 52668896;
      int *p = (int *) a;
      printf("%d \n", *p);
      system("PAUSE");
}

Mi aspetto che venga stampato a video il valore 3, ma ricevo un errore di quelli in cui si dice che l'applicazione verrà chiusa ecc... Dove sto sbagliando??

Grazie Mille



PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:05
Domenica, 11/07/2010
Sbagli nel non considerare che la memoria, nei sistemi moderni, è virtuale.

L'indirizzo non è assoluto ma è virtuale e mappato in RAM/disco dal sistema operativo.

Questo significa che l'indirizzo è relativo al processo e non a tutto il sistema.

Quindi, l'indirizzo usato fa riferimento al processo del programma C che sarà in esecuzione (e che non esiste) e non a quello che pensi tu.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
tiz85 (Normal User)
Newbie


Messaggi: 3
Iscritto: 11/07/2010

Segnala al moderatore
Postato alle 14:08
Domenica, 11/07/2010
ah ho capito, e quindi come posso fare per accedere a quella locazione di memoria che mi serve?? Esiste un modo?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:17
Domenica, 11/07/2010
Devi usare le apposite API del sistema operativo che, con i corretti "permessi", ti possonon consentire di accedere ai dati di un altro processo.

Ma se questi permessi non li hai (cioè se l'utente con cui operi, non ha i permessi adeguati per accedere a quel processo) non lo potrai fare, per evidenti problemi di sicurezza.

Dovrai documentarti (non è semplice) sulle API

OpenProcess
WriteProcessMemory


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
tiz85 (Normal User)
Newbie


Messaggi: 3
Iscritto: 11/07/2010

Segnala al moderatore
Postato alle 14:23
Domenica, 11/07/2010
Ok, ti ringrazio per i suggerimenti! Ci proverò... :)

Ciao

PM Quote