 
View Full Version : [C e gcc] sezione shared in immagine ELF
salve, è possibile col gcc creare gestire e modificare nomi e attributi delle sezioni di un'immagine ELF di un programma C? quello che mi interessava fare era creare (su Linux) uno shared object che abbia una sezione di dati condivisa; che direttive dovrei usare?
grazie.
dal numero di risposte mi pare di capire che non si possa :muro:
e come faccio a fare la stessa cosa però usando il MinGW e volendo produrre un file PE? in altre parole, qual è l'equivalente MinGW di #pragma data_seg? grazie :mc:
Secondo me (fino a che qualcuno non me lo dimostra) il comp msvc è il migliore.
Riguardo l'efficienza di gcc con il C è buona mentre non lo sono per il C++.
Questo è un buon esempio con il comp msvc
http://www.twork.it/work/Oki_DataSegs.zip 
Function Forwarding:
#pragma comment (linker, "/export:Func1=Dll.OtherFunc");
(Ho cercato una cosa simile con gcc ma non l'ho trovata)
Preferisco esportare con .def
Ti faccio un esempio di file .DEF che fa la stessa cosa di quella pragma li:
;Esempio file def
LIBRARY "blabla"
EXPORTS
func_uno mx_sock.altra_func_1 @23
func_due mx_sock.altra_func_2 @45 PRIVATE
senza usare i pragma.
W win il migliore
Edit: cionci usa il ming chissà se ne sà qualcosa
ilsensine
02-01-2006, 10:09
quello che mi interessava fare era creare (su Linux) uno shared object che abbia una sezione di dati condivisa
...cioè?
...cioè? lascia perdere, ho scoperto per certo che non si può :D
(il formato ELF non ha sezoni condivise tra processi)
cambio la domanda:
mi interessava sapere come fare col gcc (sia col MinGW sia col gcc di Linux) a creare un'immagine PE (un programma per Windows insomma) contenente una sezione shared, ovvero una sezione che sia mappata sulle stesse pagine fisiche in tutti i processi in cui il modulo viene caricato (sia esso un exe, una dll, un ocx, una qualsiasi altra cosa); naturalmente nel codice dovrò fare in modo di sincronizzare gli accessi al contenuto della sezione. :)
e poi più in generale mi interessava sapere come faccio (sempre col gcc) a gestirmi a piacere i nomi e gli attributi delle sezioni; cioè, detto in parole poverissime, qual è l'equivalente GNU di #pragma data_seg??? :cry: :cry: :cry:
hum, sta a vedere che hanno messo #pragma data_seg pure nel MinGW... :mbe:
ora provo, non si sa mai dovesse funzionare... :mbe:
---___---'''
va in crash il linker :fagiano:
help please come faccio??? :cry:
ilsensine
02-01-2006, 14:51
lascia perdere, ho scoperto per certo che non si può :D
(il formato ELF non ha sezoni condivise tra processi)
Forse perché sarebbe una piccola fonte di problemi di sicurezza? ;) 
Puoi gestire un piccolo segmento condiviso (ipc o in mmap su un file) tramite una funzione constructor della tua libreria, così da avere almeno un pò di controllo su chi può scrivere sul segmento e chi no...io farei così, se deve essere "trasparente" all'applicazione...
Forse perché sarebbe una piccola fonte di problemi di sicurezza? ;)  mumble :mbe: non ci avevo mai pensato, però c'è anche da dire che una sezione shared è una forma di IPC, e quindi i programmi in genere non ci vanno a scrivere dati sensibili (tipo password), cioè ci scrivono dati partendo dall'assunto che chi legge è "unreliable"; per fare un paragone Linux: metti che due processi comunicano tramite named pipe (fifo); chi scrive chiaramente non scrive dati sensibili (oppure li scrive ma non in chiaro), perché chi legge potrebbe non essere il processo aspettato. :)
edit: aggiungi anche che un processo per poter leggere i dati della sezione condivisa deve aver necessariamente caricato il modulo che la contiene, sia esso un exe o una dll o qualsiasi altra cosa: considerando che i files sono protetti dal sistema di sicurezza di Windows NT direi che comunque una certa protezione c'è. ;)
per esempio, mettiamo che io ho due utenti sul mio sistema NT: Administrator e Utonto; Utonto viene usato per accedere ad Internet e per lavorare sui documenti (immagini, doc di Word, slides, ecc.) e per alcune cartelle ha accesso in sola lettura o esecuzione, ma non in scrittura (diciamo le cartelle C:\WINDOWS e C:\Program Files); Administrator invece ha accesso su tutto quanto e viene usato per la manutenzione del sistema (es. installazione / rimozione di programmi).
mettiamo che Utonto andando in Internet con IE (male male :nonsifa: :D) si becca un virus: diciamo che si tratta di un buffer overflow di IE, quindi il codice malizioso viene eseguito nel processo iexplore.exe; contemporaneamente sta girando un programma importante sotto l'account di Administrator, e si da il caso che ce ne sia più istanze e che comunichino con una sezione shared presente nell'eseguibile; il codice malizioso per poter leggere e/o modificare la sezione shared deve poter caricare il modulo che la contiene, che si trova in C:\Program Files oppure in C:\WINDOWS oppure ancora in C:\WINDOWS\SYSTEM32, e infatti lo carica senza problemi perché gli accessi in lettura ed esecuzione ce li ha anche Utonto, e infatti l'esempio non calza solo che dopo aver scritto tutto sto popo' di roba non mi va di cancellarlo. :D
edit2: bella pe' Linux. :rotfl:
ilsensine
02-01-2006, 15:13
Ehm no; file, pipe e oggetti IPC hanno controllo sui permessi. Non puoi ad es. leggere da un pipe se il processo non è in grado di aprirlo con i privilegi in lettura.
Usando un constructor+mmap puoi facilmente ottenere il pezzo condiviso che ti serve; vuoi che ti posto un esempio?
al contrario, siccome le named pipes suppongo siano sempre sono soggette al sistema di sicurezza (essendo dei files), immagino che sia possibile proteggerle in maniera tale da impedire anche la lettura a processi estranei, e quindi le fifo non danno problemi di sicurezza. :D ma LOL...
edit: ecco, hai postato prima che io postassi questo post :D
no thx, l'esempio non mi serve: il fatto delle sezioni shared mi serviva per Windows, non per Linux; mi serve di generare delle immagini PE col gcc avendo controllo su nomi e attributi delle sezioni (è per un lavoro open source che sto facendo con DanieleC88).
e in particolare oltre a definire sezioni shared (ma ci sto un po' ripensando :D) mi serviva di poter definire quali sezioni debbano essere paginabili e quali no.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.