PDA

Visualizza la versione completa : [C/Assembly] accesso diretto alla memoria


maluz1
17-03-2014, 18:41
salve a tutti:)

vorrei creare un programma per accedere direttamente a un qualsiasi indirizzo di memoria per solo scopo di lettura ovviamente.

a dirsi mi è sembrato semplice ma a farsi no.

prima di tutto avrei bisogno di sapere qual è il tipo di variabile in cui un indirizzo di memoria( 0x... ) può essere salvato, quindi int o qualcosa d'altro.

inoltre mi piacerebbe sapere una cosa a proposito della differenza tra indirizzo vero e proprio e indirizzo trattato dal C, o meglio: sto imparando l'assembly( quindi se saprete darmi una risposta inerente al linguaggio macchina ve ne sarò grato) e debuggando e aprendo la finestra della CPU ho visto che gli indirizzi per il computer sono formati giustamente da 8 cifre( siccome il mio è un sistema a 32 bit ), ma codeblock e credo anche tutti gli altri ambienti di sviluppo usa indirizzi di 6 cifre. ho pensato che potrebbe essere perchè elimina gli zeri più significativi, poichè se non sbaglio la memoria è suddivisa in seg:offset e quindi per esempio 0x23yyyy= 0x0023yyyy, ma non essendo sicuro ho preferito chiedere.

grazie in anticipo:)

oregon
17-03-2014, 19:54
La memoria dei moderni sistemi operativi è virtuale e allocata per processo. Non accederai alla memoria fisica da nessun processo di tipo utente. Dovrai scrivere a livello kernel.

Cosa vuoi fare tu praticamente? Cosa vuoi leggere esattamente?

maluz1
17-03-2014, 21:38
vorrei creare un programma che dato un indirizzo di memoria in ingresso potesse leggere il contenuto di ogni cella di memoria a partire da quell'indirizzo fino a un tot sempre inserito in ingresso.

prima di tutto ho provato a fare alcune prove però con un indirizzo di memoria "costante" e attraverso un char* ho ottenuto il suo contenuto( mi sembra "ë" ) e mi sembrava fattibile. poi ho pensato di trasformare la stringa in input dell'indirizzo di memoria in un intero procedendo per mezzo degli operatori bit-wise( bit a bit ). ho preferito però informarmi se ciò era possibile e così ho fatto.

grazie mille per la risposta:)
non ho capito una cosa però: per virtuale cosa intendi?

oregon
17-03-2014, 21:44
Non mi sono spiegato. La memoria a cui accedi è relativa al tuo processo non al sistema in generale.

Per capirci meglio, se tu pensi di leggere o scrivere da locazioni di un "gioco", non lo potrai fare perché gli indirizzi saranno relativi al tuo processo e non al gioco.

maluz1
17-03-2014, 22:56
ah capito:) quindi non esiste un metodo per raggiungere il mio obbiettivo? neanche con l'assembly?

oregon
18-03-2014, 00:35
Non è questione di assembly o C.

E' il sistema di protezione della memoria usato dalla CPU che non ti consente di accedere alla memoria fisica da un processo utente.

Non hai detto a cosa ti serve veramente ...

maluz1
18-03-2014, 14:39
In realta è nato tutto come pura curiosità di poter esaminare ogni singola cella della memoria.. Niente di particolare

grazie ancora di tutto allora:)

Loading