Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-11-2005, 21:11   #21
telluccio
Member
 
Iscritto dal: Jan 2005
Messaggi: 46
forse meglio passare al settaccio i post prima di copiare e incollare..
io che sono pratico, da nubio ho capito alcune cose.
ho fatto un programma che legge un file binario dividendolo per stringhe ('\n') ad ogni stringa il programma si blocca e visualizza il valore in hex delle prime 2 word per passare alla succesiva..
tutti gli eseguibili fatti da me iniziano sempre con la stessa stringa di 119 byte:

Z   ÿÿ ¸ @ € º ´ Í!¸LÍ!This program cannot be run in DOS mode.

poi le successive stringhe cambiano a seconda dell eseguibile...pero capitano gruppi di stringhe che sono uguali (o diverse solo nel valore dell ultimo byte della seconda word)come valore delle prime 2 word...
e giusto pensare che il processore inerpreta la stringa dal valore delle prime word??
ps:
molte cose che gentilmente mi spiegate non le conosco..
ciao

Ultima modifica di telluccio : 09-11-2005 alle 21:23.
telluccio è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2005, 09:44   #22
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
non ho ben capito la domanda, ma tutti i programmi che fai iniziano come hai scritto tu (a parte che ti sei scordato la M iniziale) perché quella parte che vedi è il vecchio header di DOS seguito dallo stub program che stampa a video quella stringa se sta girando in DOS anziché in Windows (utilizza qualche interrupt del BIOS).
per leggere un file PE da un programma C devi (come è scritto nella documentazione Microsoft del formato PE) saltare subito all'offset 0x3C, leggere un DWORD, saltare all'offset specificato da quel DWORD, e poi leggere i nuovi headers PE.
è impossibile leggere un programma con Blocco Note... per ricavare informazioni da un file PE esistono altri strumenti, tipo il PEView e il Resource Hacker .
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2005, 22:39   #23
bottomap
Member
 
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
Ciao,

Direi che hai fatto tutte ottime precisazioni... un post completo sull'argomento sarebbe in effetti piuttosto oneroso - pagine e pagine solo di introduzione.

Gli eseguibili NE sono, come hai intuito gli eseguibili di win3.1 anche se il formato è stato introdotto con OS/2... ancora numerosi VXD e diverse applicazioni (queste ultime almeno fino a win98) utilizzano questo formato. La signature NE è proprio quella di questo tipo di eseguibili... sono comunque abbastanza frequenti per piccole applicazioni o programmi vecchiotti, non è impossibile che ti capiti sottomano... win 32/64bit è ovviamente sempre in grado di caricarli ed eseguirli.

Il campo e_lfanew è effettivamente l'offset 0x3C di cui parli, praticamente l'unico punto "fisso" di tutto l'eseguibile...

Non sapevo che l'optional header fosse opzionale solo sotto windows... quali altri SO utilizzano il PE come formato di eseguibile?

Tutte le sezioni, probabilmente non ho postato in maniera chiara, possono non essere presenti (a parte, ovviamente, quella contenente il codice)... file privi di .rsrc sono comuni, .idata è un po'più raro che non ci sia, .edata è presente quasi solo nelle DLL... .rdata in generale contiene informazioni di debug (quindi non è generalmente presente nelle versioni release dei programmi), tutto questo almeno con i compilatori MS, non so se altri compilatori la utilizzano in altro modo...

Cito, a questo riguardo MSDN:
Quote:
The .rdata section is used for at least two things. First, in Microsoft linker-produced EXEs, the .rdata section holds the debug directory, which is only present in EXE files. (In TLINK32 EXEs, the debug directory is in a section named .debug.) The debug directory is an array of IMAGE_DEBUG_DIRECTORY structures. These structures hold information about the type, size, and location of the various types of debug information stored in the file. Three main types of debug information appear: CodeView®, COFF, and FPO.
Il discorso sulla EntryPoint striminzita riguarda, come ho postato, MFC e VB... nel primo caso ci sono due chiamate a funzioni Afx (che impostano il framework mfc e ricevono un puntatore ad una lunga vtable - che rappresenta poi l'oggetto CWinApp), dopodiché la funzione di Entry termina...
Lo stesso avviene più o meno per VB...

Ma forse ho unito la start con la WinMain in questa mia considerazione... la funzione start che inizia effettivamente il programma (in pratica imposta tutto il necessario alla CRT per proseguire) è praticamente sempre uguale sotto lo stesso compilatore... ed in genere non influisce nello studio del codice.

Ad ogni modo, per questo motivo andare a rintracciare una funzione all'interno dell'intero asm può essere complicato... soprattutto in un'applicazione con bottoni, menù e quant'altro è estremamente difficile capire esattamente lo schema degli eventi che si susseguono (es: il CListView si aggiorna, invia un WM_ ad una delle CEdit che nella sua OnChange invia un WM_ ad un altro controllo, il tutto mentre alla CWinApp arrivano n messaggi NC_ dai controlli) se si ha a disposizione solo l'asm.

Per la creazione dei selettori non sono del tutto sicuro... credo ne vengano creati due (data e codice) giusto per impostarne il flag per i diritti di accesso...

Per il formato DOS si deve distinguere tra .EXE e .COM...

Il secondo (COM), come dici è codice puro (deve essere contenuto tutto in un segmento, inizia l'esecuzione all'offset 0x100 e nei primi 256 bytes è presente il PSP - ProgramSegmentPrefix che contiene un bel po'di informazioni, tra cui la linea di comando). Nei .COM non è possibile utilizzare registri di segmento, per cui codice, stack e dati devono stare tutti in 64k.

Il primo (EXE) contiene un IMAGE_DOS_HEADER come i PE e gli NE che danno informazioni oltre che sull'entry point (in questo caso è variabile) sulla corretta segmentazione (in genere viene creato un CS, un DS=ES ed un SS), sulla dimensione dello stack e numerose altre cose. DS ed ES puntano inizialmente al PSP del programma.
Al caricamento da parte del loader vengono creati i segmenti, vengono rilocati gli indirizzi e l'esecuzione parte dall'entry point definita nell'IMAGE_DOS_HEADER (per completezza, negli eseguibili PE questo EntryPoint DOS punta ad una funzione di stub a 16bit che in genere stampa il messaggio "Questo programma richiede windows" o qualcosa del genere, sicuramente l'avrai vista).

Ciaociao
__________________
Venite a visitarci qui:http://www.bottomap.com
Bottomap is a proud Masterdrive.it moderator
bottomap è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2005, 13:55   #24
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da bottomap
Non sapevo che l'optional header fosse opzionale solo sotto windows... quali altri SO utilizzano il PE come formato di eseguibile?
nessuno
il concetto dell'header opzionale sarebbe che può variare da un sistema all'altro, ma alla fine l'unico SO che usa il PE è Windows
Windows CE forse ha un header opzionale diverso, ma non ne sono neanche troppo sicuro

Quote:
.rdata in generale contiene informazioni di debug (quindi non è generalmente presente nelle versioni release dei programmi), tutto questo almeno con i compilatori MS, non so se altri compilatori la utilizzano in altro modo...
veramente .rdata dovrebbe contenere più in generale dati a sola lettura... in teoria potrebbe anche essere presente nei programmi compilati in modalità release...

Quote:
Ad ogni modo, per questo motivo andare a rintracciare una funzione all'interno dell'intero asm può essere complicato... soprattutto in un'applicazione con bottoni, menù e quant'altro è estremamente difficile capire esattamente lo schema degli eventi che si susseguono (es: il CListView si aggiorna, invia un WM_ ad una delle CEdit che nella sua OnChange invia un WM_ ad un altro controllo, il tutto mentre alla CWinApp arrivano n messaggi NC_ dai controlli) se si ha a disposizione solo l'asm.
per tracciare i messaggi ci sono gli hook globali
vedi Spy++, è un tool molto utile.

Quote:
Per la creazione dei selettori non sono del tutto sicuro... credo ne vengano creati due (data e codice) giusto per impostarne il flag per i diritti di accesso...
no, i segmenti penso che siano uno per ogni processo, ma non sono sicuro neanche di questo, forse sono un paio in tutto il sistema (user space e kernel space).
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Cina, effetto sanzioni USA: Cambricon - ...
La gamma Mac riceverà tante novit...
DDR5 supera i 13.000 MT/s, stavolta uffi...
Il nuovo iPhone con display pieghevole p...
ASUS ProArt PA32KCX: ecco a voi il primo...
DAZN ci riprova: piano Full a meno di 20...
Nuovi prezzi, più bassi: scendono...
PC Desktop HP Victus con RTX 4060 e Ryze...
Giù di altri 10€: solo 939€ per M...
Offerte Amazon da non credere: sconti fo...
Windows 11 scivola sugli aggiornamenti d...
Razer Kiyo V2: la nuova webcam 4K con AI...
ASUS ROG NUC 9: i mini PC (ex) Intel, ad...
Streaming illegale, il ministro dello Sp...
Microsoft avrebbe affidato a Intel la pr...
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: 00:23.


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