|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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;
}
__________________
Scusa Kewell, non avevo fatto caso. |
|
|
|
|
|
#2 |
|
Senior Member
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
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Mar 2007
Messaggi: 73
|
scusami, è da poco che studio c++, potresti spiegarmi meglio la situazione?
__________________
Scusa Kewell, non avevo fatto caso. |
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
da dove hai tirato fuori quell'indirizzo?
|
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ah, a parte che hai incluso male iostream... devi toglierci l'estensione:
Codice:
#include <iostream> Codice:
using namespace std; |
|
|
|
|
|
#6 |
|
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. |
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
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);
}
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 |
|
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() 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? |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
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 |
|
|
|
|
|
|
#11 |
|
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. |
|
|
|
|
|
#12 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Mar 2007
Messaggi: 73
|
API, sarebbe Visual Basic?
__________________
Scusa Kewell, non avevo fatto caso. |
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
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. |
|
|
|
|
|
#15 |
|
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. |
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
http://msdn2.microsoft.com/en-us/library/ms680553.aspx http://msdn2.microsoft.com/en-us/library/ms681674.aspx |
|
|
|
|
|
|
#17 |
|
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. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Mar 2007
Messaggi: 73
|
da qualche parte si troverà un manuale
__________________
Scusa Kewell, non avevo fatto caso. |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:19.





















