Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-08-2007, 11:09   #1
Bellerofonte90
Member
 
Iscritto dal: Mar 2007
Messaggi: 73
[C++] Modifica ciò che contiene un dato indirizzo di memoria

Codice:
#include <iostream.h>

int main()
{
	unsigned int *scope=(unsigned int *)0x0090DC36;
	cout<<*scope;
	return 0;
}
Questo programma dovrebbe far vedere ciò che c'è dentro la locazione di memoria 0x0090DC36 ma mi dà errore nel runtime. Cosa posso fare?
__________________
Scusa Kewell, non avevo fatto caso.
Bellerofonte90 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 11:30   #2
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Da quello che so un casting del genere ha comportamento undefined e in certi casi puo` ritornare indirizzi di memoria errati. Inoltre se cerchi di leggere da una zona di memoria protetta avresti runtime error
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 11:40   #3
Bellerofonte90
Member
 
Iscritto dal: Mar 2007
Messaggi: 73
scusami, è da poco che studio c++, potresti spiegarmi meglio la situazione?
__________________
Scusa Kewell, non avevo fatto caso.
Bellerofonte90 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 11:48   #4
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
da dove hai tirato fuori quell'indirizzo?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 11:50   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ah, a parte che hai incluso male iostream... devi toglierci l'estensione:
Codice:
#include <iostream>
e se non erro devi anche usare il namespace std esplicitandolo prima di cout oppure aggiungendo la seguente linea prima del main:
Codice:
using namespace std;
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 11:54   #6
Bellerofonte90
Member
 
Iscritto dal: Mar 2007
Messaggi: 73
quelle sono cose che non influenzano nulla, è solo buona abitudine. Utilizzo VC++ 6 professional.
__________________
Scusa Kewell, non avevo fatto caso.
Bellerofonte90 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 12:04   #7
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Bellerofonte90 Guarda i messaggi
quelle sono cose che non influenzano nulla, è solo buona abitudine. Utilizzo VC++ 6 professional.
rimane comunque la domanda del post #4
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 12:08   #8
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Bellerofonte90 Guarda i messaggi
Codice:
#include <iostream.h>

int main()
{
	unsigned int *scope=(unsigned int *)0x0090DC36;
	cout<<*scope;
	return 0;
}
Questo programma dovrebbe far vedere ciò che c'è dentro la locazione di memoria 0x0090DC36 ma mi dà errore nel runtime. Cosa posso fare?
Il tuo cast e' corretto, cosi' come l'applicazione che ne risulta.
C'e' un pero'... una volta che il tuo software e' compilato, andra' in esecuzione sotto un sistema operativo.
Il SO e' in carico di caricare il tuo programma, assegnargli risorse ed eseguirlo.

Da quello che ho capito, lo vuoi eseguire sotto MS Windows, giusto? Beh, allora il Sistema operativo carichera' il tuo programma in una locazione FISICA di memoria e programmera' una parte della CPU, detta MMU (memory Management Unit, e' un acronimo che si riferiva ad altri processori, non so esattamente x Intel) assegnandoti una parte della risorsa detta MEMORIA.

Risultato: il tuo programma gira ad un indirizzo fisico, ma all'interno dello stesso tu vedi degli indirizzi LOGICI! Ogni volta che accedi alla memoria, la MMU (opportunamente programmata dal SO) si preoccupa di fare le opportune conversioni logico/fisico.
Ovviamente quindi non accederai all'indirizzo fisico 0x0090DC36, bensi' a quello logico: se esso e' all'interno del tuo spazio di indirizzamento, otterrai un numero in uscita (direi indeterminato), se e' fuori da detto spazio, otterrai un fault e la tua applicazione verra' terminata.

Se utilizzassi un altro sistema operativo che ti permettesse l'accesso diretto alla memoria, il tuo programma stamperebbe cosa c'e' all'indirizzo FISICO specificato.

Esempio: sotto Windows, usando il tuo compilatore, scrivi:

Codice:
int main ()
{
   printf ("Il seguente programma comincia all'indirizzo 0x%x\n", (int)main);
   Sleep (1000000);
}
Compilalo e lancialo da prompt. Ora apri un'altra finestra e lancialo ancora.
Ripeti l'operazione. Otterrai che lo stesso programma, lanciato in esecuzione diverse volte, parte sempre dallo stesso indirizzo.

Ovviamente, se hai 10 processi in esecuzione, non possono partire dallo stesso indirizzo! A meno che... non sia un indirizzo LOGICO e non FISICO
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 12:22   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Ovviamente, se hai 10 processi in esecuzione, non possono partire dallo stesso indirizzo! A meno che... non sia un indirizzo LOGICO e non FISICO
in realtà (almeno su Windows) partono anche dallo stesso indirizzo fisico visto che il modulo eseguibile è condiviso tra tutti i processi che lo usano tramite protezione COW (Copy-On-Write), il che significa che per replicare le pagine di memoria di quell'eseguibile e farle andare ad un diverso indirizzo fisico è necessaria una scrittura su di esse, come ad esempio le scritture che il sistema operativo effettua nel rilocare il modulo; altrimenti detto: se un eseguibile è in esecuzione in un certo processo e un altro processo carica quello stesso eseguibile con LoadLibrary ed il sistema operativo è costretto a rilocarlo, quello è uno dei pochi casi in cui quel programma sarà caricato ad indirizzi fisici differenti

d'altra parte se un moderno sistema operativo dovesse caricare 10 volte lo stesso codice per eseguire 10 processi differenti a partire dallo stesso file eseguibile sarebbe un sistema operativo un po' curioso, ti pare?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 12:25   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da 71104 Guarda i messaggi
in realtà (almeno su Windows) partono anche dallo stesso indirizzo fisico visto che il modulo eseguibile è condiviso tra tutti i processi che lo usano tramite protezione COW (Copy-On-Write), il che significa che per replicare le pagine di memoria di quell'eseguibile e farle andare ad un diverso indirizzo fisico è necessaria una scrittura su di esse, come ad esempio le scritture che il sistema operativo effettua nel rilocare il modulo; altrimenti detto: se un eseguibile è in esecuzione in un certo processo e un altro processo carica quello stesso eseguibile con LoadLibrary ed il sistema operativo è costretto a rilocarlo, quello è uno dei pochi casi in cui quel programma sarà caricato ad indirizzi fisici differenti

d'altra parte se un moderno sistema operativo dovesse caricare 10 volte lo stesso codice per eseguire 10 processi differenti a partire dallo stesso file eseguibile sarebbe un sistema operativo un po' curioso, ti pare?
Vero. Ho semplificato un po' troppo...
Probabilmente a questo punto, basterebbe fare una serie di copie della stessa applicazione, ovviamente con nomi diversi...
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 12:49   #11
Bellerofonte90
Member
 
Iscritto dal: Mar 2007
Messaggi: 73
siete stati illuminanti. Vi faccio un altro esempio, non sò se giocate a qualche videogioco sul pc. Su siti internet si trovano i soliti trucchi per videogiochi, sono programmi che accedono alla memoria e la modificano in modo per esempio, se hai 100000 gold per costruire un acquesdotto (stò inventando) e tu non li hai puoi modificare la memoria raggiungendo tale livello tramite questo programma. Quelli come fanno a funzionare?
__________________
Scusa Kewell, non avevo fatto caso.
Bellerofonte90 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 13:03   #12
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Bellerofonte90 Guarda i messaggi
siete stati illuminanti. Vi faccio un altro esempio, non sò se giocate a qualche videogioco sul pc. Su siti internet si trovano i soliti trucchi per videogiochi, sono programmi che accedono alla memoria e la modificano in modo per esempio, se hai 100000 gold per costruire un acquesdotto (stò inventando) e tu non li hai puoi modificare la memoria raggiungendo tale livello tramite questo programma. Quelli come fanno a funzionare?
devono modificare degli indirizzi di memoria di un altro processo. chiaramente è una cosa che non si può fare direttamente poiché ciascun processo vede solamente il suo spazio di indirizzamento, ma su Windows ciò è possibile utilizzando le funzioni API ReadProcessMemory e WriteProcessMemory.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 13:05   #13
Bellerofonte90
Member
 
Iscritto dal: Mar 2007
Messaggi: 73
API, sarebbe Visual Basic?
__________________
Scusa Kewell, non avevo fatto caso.
Bellerofonte90 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 13:10   #14
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Bellerofonte90 Guarda i messaggi
API, sarebbe Visual Basic?
API è una sigla dal significato molto generico che sta per Application Programming Interface, e si riferisce a qualsiasi interfaccia di programmazione esposta ad un'applicazione da uno strato di software sottostante. ma io mi riferivo ad un caso specifico di API, ovvero le API Win32: sono le funzioni che espongono alle applicazioni i servizi offerti dal sistema operativo Windows. le API Win32 sono migliaia se non decine di migliaia, e sono documentate molto in dettaglio nella libreria MSDN. per scrivere un programma che utilizzi le API Win32 basta che tu abbia un compilatore Win32 fornito degli headers necessari ad importare queste funzioni. ad esempio puoi utilizzare Visual C++ 2005 (la versione Express è gratuita), basta che installi il Platform SDK (vedi istruzioni di installazione) ed includi nel tuo programma l'header windows.h. per la cronaca di Visual C++ esiste anche una beta della versione 2008, non l'ho mai provata.

Ultima modifica di 71104 : 07-08-2007 alle 13:12.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 15:44   #15
Bellerofonte90
Member
 
Iscritto dal: Mar 2007
Messaggi: 73
Allora come posso fare? ho visto che sul mio VC++ 6 Professional c'è windows.h ora come posso fare tutto?
__________________
Scusa Kewell, non avevo fatto caso.
Bellerofonte90 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 16:40   #16
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Bellerofonte90 Guarda i messaggi
Allora come posso fare? ho visto che sul mio VC++ 6 Professional c'è windows.h ora come posso fare tutto?
ReadProcessMemory e WriteProcessMemory sono due normalissime funzioni, usale. qui ci sono le rispettive documentazioni:
http://msdn2.microsoft.com/en-us/library/ms680553.aspx
http://msdn2.microsoft.com/en-us/library/ms681674.aspx
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 19:31   #17
Bellerofonte90
Member
 
Iscritto dal: Mar 2007
Messaggi: 73
mi devi scusare, in inglese sono una mezza frana, dove posso trovare la spiegazione in italiano?
__________________
Scusa Kewell, non avevo fatto caso.
Bellerofonte90 è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2007, 23:05   #18
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Bellerofonte90 Guarda i messaggi
dove posso trovare la spiegazione in italiano?
Non esiste...comunque ti sconsiglio di avventurarti nei meandri di quelle API se prima non avrai acquisito una buona conoscenza generale delle API di Windows e del C.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 08:04   #19
Bellerofonte90
Member
 
Iscritto dal: Mar 2007
Messaggi: 73
da qualche parte si troverà un manuale
__________________
Scusa Kewell, non avevo fatto caso.
Bellerofonte90 è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 08:10   #20
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Bellerofonte90 Guarda i messaggi
da qualche parte si troverà un manuale
Tutta la documentazione ufficiale sulle API, ma soprattutto tutta la documentazioni su API avanzate come queste è inglese.
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Dopo gli unicorni, arrivano i "soon...
Europei sempre più diffidenti ver...
L'acquisto di Steam Machine è un ...
Lenovo Prime Day: i 6 migliori sconti (a...
CATL non riesce a superare la fase proto...
Mythos, il caso si complica: causa contr...
Il pazzesco nuovo record di Xiaomi YU7 G...
OneXPlayer 3: un PC gaming in formato Ni...
Climate.us riporta online i 15 anni di C...
Hisense da 58 pollici sotto i 300€ fa tr...
Windows 11 26H2: cosa cambia e chi resta...
SpaceX ha lanciato la sua prima capsula ...
Il prezzo medio di vendita degli smartph...
Prime Day robot tagliaerba: MAMMOTION, D...
Recensione Google Home Speaker: Gemini s...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:50.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v