Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-02-2005, 19:34   #1
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
CS:EIP

Salve a tutto il forum

Volevo avere un'informazione di basso livello, diciamo così: in che modo funzionano esattamente i registri CS ed EIP in modalità protetta? Sono sempre gli unici due implicati nella memorizzazione dell'indirizzo dell'istruzione corrente? In che modo devono essere combinati per ottenere questo indirizzo? Cioè, cosa vuol dire esattamente la dicitura "CS:EIP"? Quello che non capisco è che il registro EIP è già a 32 bit (se non sbaglio...) e quindi da solo dovrebbe essere sufficiente a descrivere un indirizzo di memoria... Non c'è una ridondanza di contenuto tra i due registri?

Per essere più specifico, vi dirò esattamente quello che mi interessava fare: lavoro in C su Windows, e ciò che volevo fare è dirottare un thread di cui ho un handle con tutti i permessi necessari, cioè:
1) sospenderlo con la SuspendThread;
2) ottenere i registri del suo contesto con GetThreadContext; la struttura risultante dovrebbe contenere tra le altre cose anche CS ed EIP; inoltre è molto importante che contenga anche uno dei 4 registri general-purpose, EAX andrebbe benissimo;
3) salvarmi da qualche parte i valori dei registri CS, EIP ed EAX e riscriverli con valori miei in modo tale che il thread, appena riesumato, vada ad eseguire un'istruzione da me stabilita;
4) settare il nuovo contesto del thread da me modificato con la SetThreadContext;
5) riesumare il thread con ResumeThread, il quale a questo punto andrà ad eseguire il codice da me stabilito.

Nota bene: il codice da me stabilito contiene alla fine una chiamata a SuspendThread, in modo tale che il thread viene nuovamente sospeso alla fine e io ho il tempo di ripristinare i valori originali di CS, EIP ed EAX.

Tutto cio' è possibile secondo voi?
Grazie

Ultima modifica di 71104 : 16-02-2005 alle 19:39.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2005, 19:35   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Una precisazione: è possibile che quando faccio tutto il casino il thread si trovi in realtà in kernel mode, non in user mode, ma sempre in modalità protetta.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2005, 10:21   #3
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
CS è un registro a 16 bit chiamato "Code Segment" .

Specifica il segmento di memoria dove risiede il codice da eseguire (ossia le istruzioni macchina del programma in esecuzione) .

In modalità protetta flat tutti i registri segmento (CS , DS, SS, ES, FS, GS) puntano nello stesso punto , ossia l'inizio della memoria e poi viene usato un OFFSET a 32 bit per spaziare dal byte 0 al byte 2^32 -1 .

Nel Registro EIP c'è l'indirizzo di memoria della prossima istruzione ad essere eseguita e semplicemente ne contiene l'OFFSET dall'inizio della memoria

In modalità reale (dove si usa maggiormente il modello di memoria Segmented) il registro CS si combina col registro IP (la controparte a 16 bit di EIP) creando un indirizzo a 20 bit che punta alla memoria dove è contenuta la prossima istruzione da eseguire .

La dicitura CS:IP o CS:EIP è un cosìddetto "far pointer" , ossia un indirizzo di memoria composto da Segment Selector (CS) e da offset (IP o EIP) . Il processore combina automaticamente questi due valori creando un indirizzo lineare che si riferisce all' area di memoria alla quale vogliamo accedere . Se ti interessa di + l'argomento e come il processore converte gli indirizzi ti consiglio di leggerti qualcosa sulla memoria segmentata nei processori x86

Per quanto riguarda il voler modificare EIP , pur non conoscendo le funzioni C che hai elencato dato che programmo per lo + sotto Linux, so che EIP non è direttamente modificabile via software , ma gli unici modi per modificarlo è usare istruzioni assembly come "JMP , Jcc, CALL , RET" oppure far verificare Interrupts o Exceptions che fanno alterare il corso di esecuzione del programma. Un metodo (tramite assembly) per dare ad EIP il valore che si vuole potrebbe essere quello di usare una CALL per memorizzare il valore di EIP nello stack , modificare il valore memorizzato nello stack, che è l'indirizzo dell' istruzione dopo la CALL, a proprio piacimento e usare "RET" per impostare EIP.

Non so se le funzioni che hai elencato in qualche modo usino qualche procedimento del genere per impostare EIP , ma se non lo fanno di sicuro non toccano EIP

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2005, 15:29   #4
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Innanzitutto grazie per la spiegazione, mi hai fatto capire varie cose, ma ho alcune domande: cosa intendi esattamente quando dici che i registri di segmento puntano tutti all'inizio della memoria? Quale sarebbe l'inizio? L'inizio della memoria dedicata al processo o proprio l'inizio nel senso "indirizzo fisico 0"?
E poi sei proprio sicuro che non si possa in alcun modo modificare il contenuto di EIP via software in maniera diretta? Nessuna delle varianti dell'istruzione MOV funziona con EIP come destinazione?
Comunque sia, se io imposto a mio piacere la struttura CONTEXT e chiamo SetThreadContext (ammesso che il mio programma abbia tutti i permessi necessari per farlo) io mi aspetto che il tutto funzioni, no? Se EIP non si può proprio modificare via software, allora probabilmente Windows quando deve modificare il contesto del thread effettua un qualche meccanismo tipo quello che hai descritto prima.
Ma quindi ammettendo che la SetThreadContext funzioni come mi aspetto, secondo te il tutto può funzionare?
Ti ringrazio per l'attenzione.

PS: una cosa che non ho specificato nei post precedenti è che il thread non è mio, nel senso che si trova in un altro processo e quindi il codice che esegue non l'ho creato io, quindi non posso mettere in quel thread tutti i CALL che mi pare; il codice sul quale "dirottare" il thread invece lo scelgo io perché lo scrivo manualmente nel processo con VirtualAllocEx e WriteProcessMemory.

PPS: tutte queste funzioni che nomino non sono funzioni standard del C, fanno parte delle interfacce API di Windows, più precisamente del subsystem Win32; probabilmente non ne conosci nessuna visto che lavori su linux

Ciao
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2005, 16:19   #5
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quando dico che punta all' inizio della memoria intendo del sistema, non quella specifica del programma.

Non sono certo che i registri puntino proprio a 0 , credo dipenda anche da come li gestisce il SO , comunque puntano in una zona prossima allo 0 nella memoria .

Come ti ho già detto nessuna istruzione Assembly (ed in particolare la MOV) agisce sul registro EIP , tranne quelle che ti ho indicato io prima, e comunque non saresti in grado comunque di modificarlo direttamente (infatti devi usare un trucchetto come quello che ti ho descritto) . Comunque non conoscendo le funzioni che hai elencato non posso sapere se funzionino o no, l'unico consiglio che ti posso dare è di provare

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2005, 16:59   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Ok, ma quindi se ho ben capito in modalità protetta per descrivere l'indirizzo dell'istruzione corrente non serve CS è sufficiente EIP? E questo indipendentemente se sono in kernel o user mode? Cioè, CS punta sempre allo stesso indirizzo fisico (prossimo allo 0) per qualsiasi processo e per qualsiasi thread?

Per quanto riguarda il fare delle prove, a dir la verità non so se e quando realizzerò tutto il baraccone, in quanto ciò che io voglio fare esattamente è eseguire del codice invisibile su un computer su cui sono certo che è installato Windows; ora, sui sistemi NT-based, esiste una certa funzione, la CreateRemoteThread, che mi permette di risolvere il problema in maniera relativamente facile, ma la stessa funzione sui sistemi win9x non è implementata, e il computer target non so che versione abbia di Windows : se ha Windows 98 o Me la CreateRemoteThread non funzionerà, e io sarò costretto ad implementare quest'altro sistema del "thread-hijacking", chiamiamolo così.
Per ora mi sono voluto informare sulla questione per pura sete di cultura informatica.
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
5G: entra in vigore il sistema AGCOM dei...
Bonus Elettrodomestici 2025, grande succ...
NVIDIA mette a tacere i timori della bol...
Col Black Friday partono anche gli scont...
I ribassi più pesanti del vero Bl...
Settimana del Black Friday: pioggia di s...
Speciale Blay Friday Dyson, sconti mai v...
I portatili più scontati del Blac...
WiFi al massimo: gli ASUS più pot...
Domotica in super sconto: tado° e Ne...
Black Friday Amazon: smartphone top a pr...
Black Friday 2025: tutte le migliori off...
Speciale Black Friday TV: 14 modelli sup...
Black Friday Amazon: le migliori offerte...
Tanti droni DJI scontati per il Black Fr...
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: 07:22.


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