Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-04-2006, 19:54   #1
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
File [EXE] come è fatto?

Salve raga, vorrei sapere se qualcuno di voi ha qualche guida semplice o appunto o qualcosa del genere in modo che io capisca bene o male come è fatto un file exe e in maniera un po' più approfondita sulle "Import Table" e "Export Table"..
Ho cercato un po' in rete ma ho trovato solo guide non semplici in inglese.. e qualcosa in italiano ma che in linea di massima per uno che come me non ne sa niente di queste cose.. sono a dir poco incomprensibili..
Grazie anticipate per l'aiuto..
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 21:00   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Dr Nick Riviera
Salve raga, vorrei sapere se qualcuno di voi ha qualche guida semplice o appunto o qualcosa del genere in modo che io capisca bene o male come è fatto un file exe e in maniera un po' più approfondita sulle "Import Table" e "Export Table"..
Ho cercato un po' in rete ma ho trovato solo guide non semplici in inglese.. e qualcosa in italiano ma che in linea di massima per uno che come me non ne sa niente di queste cose.. sono a dir poco incomprensibili..
Grazie anticipate per l'aiuto..
Ciao, scusa ma in questo momento ti devo rispondere un po' velocemente.
Vai su www.wotsit.org e cerca l'estensione exe. Ci troverai diversi documenti.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 21:03   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Dr Nick Riviera
Salve raga, vorrei sapere se qualcuno di voi ha qualche guida semplice o appunto o qualcosa del genere in modo che io capisca bene o male come è fatto un file exe e in maniera un po' più approfondita sulle "Import Table" e "Export Table"..
Ho cercato un po' in rete ma ho trovato solo guide non semplici in inglese.. e qualcosa in italiano ma che in linea di massima per uno che come me non ne sa niente di queste cose.. sono a dir poco incomprensibili..
Grazie anticipate per l'aiuto..
sicuramente prima di imparare il formato PE/COFF dovresti avere una minima infarinatura circa la gestione della memoria virtuale. comunque sia quasi tutto lo scibile di Windows sta su MSDN, compresi formato PE/COFF e gestione della memoria virtuale su Windows; e il resto sta su Google.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 21:42   #4
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Grazie.. ho scaricato questo --> Portable Executable Format [Micheal J. O'Leary]
..però il mio problema è che ho dei vuoti su dei concetti di base.. ma non posso nemmeno sapere tutto sennò non ci levo le gambe..
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 21:46   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Dr Nick Riviera
Grazie.. ho scaricato questo --> Portable Executable Format [Micheal J. O'Leary]
..però il mio problema è che ho dei vuoti su dei concetti di base.. ma non posso nemmeno sapere tutto sennò non ci levo le gambe..
chiedi qua no?
di' cos'è che non conosci e chi può ti darà un'infarinatura e qualche buon link a MSDN.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 12:37   #6
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Per ora ho trovato un link dove si tratta l'argomento PE in italiano.. vedo di dare una lettura a quello prima di porre altre domande in modo da vedere se alcune di esse riesco ad evitarle..
Grazie della disponibilità.. tornerò tra qualche giorno..
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 13:21   #7
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Ho dato un po' una lettura a questo file di testo, sono arrivato alle import table e viene fatto l'esempio con notepad.exe.. Intanto l'esempio non corrisponde a quello che faccio io.. cioè, lui dice che RVA è 00006000 e invece a me viene 00007604... quindi lui dice che sono già allineati e invece non è così.. e non capisco come si faccia l'allineamento dato che non lo spiega.. inoltre poi con il debugger vengono mostrate le dword a gruppi di 5 e dice che la prima dword riguarda una unoin: IMPORT FLAGS or OriginalFirstThunk e il valore di questo punta a un indirizzo che contiene le funzioni importate.. ma io non lo trovo sul debugger..
Sapete niente in merito?
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 13:47   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Se hai un Visual C++ puoi usare l'utility DUMPBIN. Esempio:
DUMPBIN /HEADERS NOTEPAD.EXE
Può essere molto utile per verificare i valori reali contenuti nei vari header.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 13:55   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Dr Nick Riviera
Ho dato un po' una lettura a questo file di testo, sono arrivato alle import table e viene fatto l'esempio con notepad.exe.. Intanto l'esempio non corrisponde a quello che faccio io.. cioè, lui dice che RVA è 00006000 e invece a me viene 00007604...
si vede che hai una build diversa, nulla di strano; da me per esempio la IAT di Blocco Note si trova all'RVA 0x00001000, e la IDT all'RVA 0x00006650. tu a quale "Import Table" ti riferisci?

Quote:
quindi lui dice che sono già allineati e invece non è così..
allineati in che senso? allineati al page bound? mica deve per forza essere così... non vedo che problemi ti crei se una struttura dati si trova ad un indirizzo piuttosto che un altro.

Quote:
e non capisco come si faccia l'allineamento dato che non lo spiega..
tu non devi mica modificare l'exe; se la IAT o la IDT del tuo Blocco Note non è allineata al page bound chissene

Quote:
inoltre poi con il debugger vengono mostrate le dword a gruppi di 5 e dice che la prima dword riguarda una unoin: IMPORT FLAGS or OriginalFirstThunk
ok, quindi ti riferisci alla IAT, non alla IDT.

Quote:
e il valore di questo punta a un indirizzo che contiene le funzioni importate.. ma io non lo trovo sul debugger..
che vuol dire non lo trovi scusa...
tu vai a consultare la IAT originale, ok? leggi la prima entry; leggi il primo DWORD della prima entry; quel DWORD ti da tutte le informazioni necessarie per trovare il nome oppure la hint di quella funzione (non sempre le funzioni vengono importate "by name"). dopodiché, vuoi sapere il nome o la hint dell'N-esima funzione importata? fai la stessa cosa per l'N-esima entry della IAT.
deve funzionare per forza, se non va avrai sbagliato qualcosa.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 14:00   #10
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Scusate raga.. ma se non ho un esempio che posso seguire per rifare i vari step col pc.. per me è arabo..
Grazie per le risposte... ma sarà dura per me capire sta roba, non mollerò, ma non sarà semplice...
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 14:04   #11
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
C'ho ripensato , vi riporto la parte del testo riferita alla import table, così capite ciò che voglio dirvi...



Tanto per cominciare mi serve una cavia adatta: qual'è un file con una IT semplice che abbiamo tutti?
il Notepad.exe! Andiamo nella Directory Table e per la IT troviamo:
Import table: RVA: 00006000 SIZE: 8C
quindi abbiamo indirizzo e grandezza. Ora 6000 è un RVA, quindi col FLC andiamocelo a convertire in raw
offset, ed otteniamo... 6000 (allineamento perfetto).
B0 61 00 00 - ED 6C 45 37 - FF FF FF FF - 8A 65 00 00
F0 63 00 00 - 18 61 00 00 - B3 C2 1F 37 - FF FF FF FF
9C 67 00 00 - 58 63 00 00 - CC 61 00 00 - EB 6C 45 37
FF FF FF FF - 92 6B 00 00 - 0C 64 00 00 - B8 60 00 00
72 C2 3E 35 - FF FF FF FF - F6 6C 00 00 - F8 62 00 00
C0 62 00 00 - ED 6C 45 37 - FF FF FF FF - 7A 6D 00 00
00 65 00 00 - A0 60 00 00 - EB 6C 45 37 - FF FF FF FF
DA 6D 00 00 - E0 62 00 00 - 00 00 00 00 - 00 00 00 00
00 00 00 00 - 00 00 00 00 - 00 00 00 00

questi sono i 140 (8Ch) bytes. Per ora non compaiono nomi di funzioni o dll.
Partiamo dalla Directory Table, che come al solito contiene le informazioni sulla IT stessa. Dobbiamo prendere in considerazione le prime 5 dwords, che ci identificano i seguenti valori:
_____________________________________________________________________________
VALORE: | DWORD NELLA IT DI ESEMPIO |
--------------------------------------------+-------------------------------+
Union: IMPORT FLAGS or OriginalFirstThunk | B0 61 00 00 |
TIME/DATE STAMP | ED 6C 45 37 |
FORWARDER CHAIN | FF FF FF FF |
NAME RVA | 8A 65 00 00 |
IMPORT ADDRESS TABLE RVA (FirstThunk) | F0 63 00 00 |
--------------------------------------------+-------------------------------+
anche le dword successive vanno considerate a gruppi di 5, compreso l'ultimo gruppo di 5 dwords che serve per chiudere la Directory dell'IT.

()- Import Flags
Questo dovrebbe rientrare nel campo "characteristics", ma in realtà la dword è una union tra il valore Characteristics e OriginalFirstThunk. Essendo il campo characteristics sempre a zero, la dword contiene il valore dell'OriginalFirstThunk, 000061B0, che punta alla struttura degli indirizzi ai nomi delle funzioni importate:
7A 65 00 00 - 68 65 00 00 - 20 65 00 00 - 4E 65 00 00
3C 65 00 00 - 2E 65 00 00 - 00 00 00 00
questi valori dunque puntano ai nomi delle funzioni (la NULL indica il termine della struttura), e questi indirizzi di nomi faranno parte degli OriginalFirstThunk (ne parleremo dopo).
E le Characteristics? La union è come una struttura, solo che i membri di tale struttura possono essere utilizzati solo uno alla volta. Quindi il la union in questione può contenere O le characteristics O OriginalFirstThunk. Notate che sono 6 funzioni importate, e che l'ordine dei loro nomi non coincide con l'ordine dei loro puntatori (cosa che noterete se andate a vedere l'IT dal PEditor).
In realtà questi indirizzi sono dei puntatori ad altre strutture, cioè:
Struttura IMAGE_IMPORT_BY_NAME:
word HINT
byte NAME1

infatti prendiamo ad esempio il primo puntatore, 0000657A, punta alla stringa:
0000657A 6C 00 53 68 65 6C 6C 45 78 65 63 75 74 65 41 00 l.ShellExecuteA
in cui i primi due byte sono la word HINT (006C) che rappresenta l'indice della funzione nell'ET della dll da cui stiamo importando la funzione, e poi il nome vero e proprio, ShellExecuteA in forma di array di byte terminati dallo 0.




Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 14:14   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Non so se può esserti utile, io personalmente non l'ho mai usata ma so che esiste la "Image Help Library". Trovi tutta la documentazione su MSDN qui.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 14:37   #13
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
scusa ma sei sicuro di aver preso la entry giusta nella Import Directory Table? :|

e poi guarda che hai sicuramente fatto confusione tra la Import Address Table e la Import Directory Table: il primo dump che hai riportato hai detto che era una IAT, mentre invece è sicuramente una IDT.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 15:53   #14
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
A me hanno detto di imparare bene le IAT... ma a sto punto non so nemmeno la differenza...
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2006, 20:25   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
in parole povere funziona così: in teoria ci stanno tante IAT e una sola IDT; la IDT è quella che va letta per prima e nella quale ogni entry descrive una IAT. ciascuna entry della IDT (assieme alla corrispettiva IAT) descrive le importazioni da un determinato modulo (ad esempio tu in un tipico exe per Windows avrai nella IDT una entry per kernel32.dll, una per user32.dll, una per gdi32.dll, e cos' via, e avrai altrettante IAT). questa è la teoria, ma alla fine nella pratica tutte le varie IAT sono messe una appresso all'altra in modo da formare un'unica grossa IAT il cui RVA sta anche scritto in un campo dell'header opzionale (tra le Data Directories ). non so se sono stato molto chiaro a dire il vero...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2006, 15:15   #16
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Grazie 71104...

In pratica ho capito che dumpando il codice si sfasano le IAT per cui è necessario fare l'allineamento per farle tornare in modo che il programma funzioni.. potete per piacere approfondirmi questo concetto?
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2006, 19:00   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Dr Nick Riviera
Grazie 71104...

In pratica ho capito che dumpando il codice si sfasano le IAT per cui è necessario fare l'allineamento per farle tornare in modo che il programma funzioni.. potete per piacere approfondirmi questo concetto?
ma se non l'ho capito manco io... :|
intendevi dire che l'RVA della tua IAT non corrisponde al suo offset nel file? ok, ma ribadisco che non vedo quali problemi ti creino gli RVA che non corrispondo agli offset: basta saperlo...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2006, 22:55   #18
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Sinceramente devo capirlo anch'io...
vabbè.. allora andiamo per gradi sennò faccio solo confusione:

- per "offset" cosa si intende in pratica?
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2006, 00:22   #19
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Dr Nick Riviera
- per "offset" cosa si intende in pratica?
in un file l'offset di un byte in esso contenuto è la distanza (in bytes) dal primo byte contenuto nel file. il primo byte di un file ha offset 0; il terzo ha offset 2; il decimo ha offset 9; e così via.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2006, 03:52   #20
Dr Nick Riviera
Senior Member
 
L'Avatar di Dr Nick Riviera
 
Iscritto dal: Sep 2004
Messaggi: 706
Grazie..
Dr Nick Riviera è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Grazie a VLT è stata misurata dir...
Blue Origin annuncia un aerofreno ripieg...
Blue Origin annuncia una nuova versione ...
LG UltraFine evo 6K: il primo monitor al...
DJI cambia direzione: investe in Elegoo ...
Black Friday Narwal 2025: risparmi da ca...
Phishing evoluto contro Apple ID: caso f...
Prestazioni in discesa nei giochi? NVIDI...
Addio ai banner dei cookie? L'UE spinge ...
Le offerte Black Friday per gli smartpho...
Il controllo qualità degli iPhone...
Qualcomm Snapdragon X Elite vola con il ...
A2RL Season 2: storia, innovazione e sor...
Core Ultra Series 3: Intel conferma l'ev...
Black Friday Amazon: la GeForce RTX 5070...
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: 01:40.


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