Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
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


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
Le 10 migliori offerte Amazon di Pasqua:...
Nuove fotografie dagli astronauti di Art...
La toilette della capsula Orion Integrit...
GeForce NOW: ecco tutte le novità in arr...
Il Realme 16 5G debutta sul mercato glob...
HONOR svela tre nuovi tablet: il più int...
Tineco Floor One S9 Master: aspira e pul...
Vivo X300 Ultra, il lancio globale è ini...
Offerte robot aspirapolvere Amazon: ECOV...
L'AI genera codice in 8 minuti e i senio...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Google Pixel 9 a 449,90€ con caricatore ...
Ecco la top 7 delle offerte Amazon, aggi...
Ex ingegnere ammette il sabotaggio: migl...
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: 21:51.


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