Virtual protect sous linux

Virtual protect sous linux - C - Programmation

Marsh Posté le 11-01-2005 à 14:26:22    

bonjour,
 
Mes collegues sont farceurs et arretent pas de faire volontairement des bugs qui ecrivent dans l'espace mémoire alloué par mes bouts de code. Conséquence : mon code plante comme une buse plus tard, je passe pour un con, c'est le drame, alors que je suis drapé du blanc de l'innocence, une auréole au dessus de ma tete et un rameaux d'olivier a la main.
 
Bref, tout ca pour dire que je me demandais si sous, hum, linux, y'avait moyen de changer les droits d'acces a certaines plage mémoire (genre 'lecture seule', quoi) et si oui, par quelle fonction ? Un genre de VirtualProtect, mais sous nioux, quoi.
 
Merci
 


Message édité par chrisbk le 11-01-2005 à 14:28:51
Reply

Marsh Posté le 11-01-2005 à 14:26:22   

Reply

Marsh Posté le 11-01-2005 à 14:34:08    

man mprotect ?

Reply

Marsh Posté le 11-01-2005 à 14:37:27    

superbe. Fini les blagues, ca va chier.
merci
 
(bon, sinon, man c'est bien (angelina) joli mais quand tu connais pas le nom de la fonction ca t'aide pas des (jeanne) masses)

Reply

Marsh Posté le 11-01-2005 à 14:37:55    

ha bin non, mon man a moi il dit pas ca ?

Reply

Marsh Posté le 11-01-2005 à 14:38:18    

exemple tiré du man :

Code :
  1. char *p;
  2.            char c;
  3.            /* Allocation d'un buffer, protection
  4.               par défaut PROT_READ|PROT_WRITE. */
  5.            p = malloc(1024 + PAGESIZE - 1);
  6.            if (!p) {
  7.                perror("Impossible d'allouer suffisament de mémoire" );
  8.                exit(errno);
  9.            }
  10.            /*
  11.             * Aligner p sur un multiple de PAGESIZE (que l'on suppose être
  12.             * une puissance de 2)
  13.             */
  14.            p = (char *) (((int) p + PAGESIZE-1) & ~(PAGESIZE-1));
  15.            c = p[666];         /* lecture ok */
  16.            p[666] = 42;        /* ecriture ok */
  17.            /* Buffer marqué en lecture-seule */
  18.            if (mprotect(p, 1024, PROT_READ)) {

Reply

Marsh Posté le 11-01-2005 à 14:39:52    


ca te donne quoi un "apropos protect" ?


Message édité par Lam's le 11-01-2005 à 14:49:52
Reply

Marsh Posté le 11-01-2005 à 14:42:58    

Lam's a écrit :

ca te donne quoi un "apropos protect" ?


 
ca va, ta schyzo ? [:joce]
(connaissais pas apropos, moi et les OS datant de noé on est pas trop copain)

Reply

Marsh Posté le 11-01-2005 à 14:51:19    

et l'equivalent de virtualalloc c'est quoi ? [:moule_bite]
 
pour ton apropos :
 
 
mprotect             (2)  - control allowable accesses to a region of memory
 

Reply

Marsh Posté le 11-01-2005 à 14:56:11    

man mmap
 
Et ensuite, tu décides si tu veux mapper /dev/zero ou /dev/mem
 
Mais j'ai une question: avec VirtualAlloc, comment fais tu pour savoir que l'adresse que tu lui donnes est une "bonne" adresse ?

Reply

Marsh Posté le 11-01-2005 à 14:59:29    

msdn virtualalloc [:moule_bite]
(en fait jcomprends pas ta question et j'ai jamais utilisé virtualalloc
 
mais la ils racontent des trucs : http://msdn.microsoft.com/library/ [...] ctions.asp

Reply

Marsh Posté le 11-01-2005 à 14:59:29   

Reply

Marsh Posté le 11-01-2005 à 15:02:55    

chrisbk a écrit :

msdn virtualalloc [:moule_bite]


 
Putain, commence pas à foutre une ambience de merde sur ce topic... :o
 

Reply

Marsh Posté le 11-01-2005 à 15:20:03    

chrisbk a écrit :

bonjour,
 
Mes collegues sont farceurs et arretent pas de faire volontairement des bugs qui ecrivent dans l'espace mémoire alloué par mes bouts de code. Conséquence : mon code plante comme une buse plus tard, je passe pour un con, c'est le drame, alors que je suis drapé du blanc de l'innocence, une auréole au dessus de ma tete et un rameaux d'olivier a la main.
 
Bref, tout ca pour dire que je me demandais si sous, hum, linux, y'avait moyen de changer les droits d'acces a certaines plage mémoire (genre 'lecture seule', quoi) et si oui, par quelle fonction ? Un genre de VirtualProtect, mais sous nioux, quoi.
 
Merci


 
Quels farceurs !
C'est impossible avec des droits utilisateurs. Un processus ayant son propre espace d'adressage, il faudrait a vu de nez, modifier les vm_area_struct que gère le noyau ... Ca demande des privilèges.
 

Reply

Marsh Posté le 11-01-2005 à 17:10:22    

bin mprotect alors ?

Reply

Marsh Posté le 11-01-2005 à 17:12:59    

Il faudrait un truc genre VirtualProtect en fait...

Reply

Marsh Posté le 11-01-2005 à 17:14:41    

!§§§§§!

Reply

Marsh Posté le 11-01-2005 à 20:03:01    

RePoNdEz A lA QuEsTiOn !§!§!

Reply

Marsh Posté le 11-01-2005 à 21:21:38    

chrisbk a écrit :

RePoNdEz A lA QuEsTiOn !§!§!


 
J'ignore comment ces farceurs de collègues :D s'y prennent pour faire planter ton programme, mais c'est probablement pas en écrivant/bidouillant des données contenues dans l'espace d'adressage de ton processus. Sauf s'ils ont des droits root, ou qu'ils profitent d'un module "viral" pour écrire dans l'espace d'adressage en question ... tout est possible, mais c'est loin d'etre simple ...
Peut-etre qu'ils t'escamotent des bibliotheques ? ton .bashrc ou équivalent est protégé ?  
Comment plante tes programmes ?
 
mprotect, ça va protéger les données en mémoire contre toi meme, et uniquement pour le meme processus.

Reply

Marsh Posté le 11-01-2005 à 21:24:55    

bin j'ai pas parler de processusn, mais de bout de code
on bosse ts ensemble sur une appli, parfois un bout de code A merde et ecrit dans un espace du bout de code B. B part en sucette et on s'enerve a comprendre poruquoi B deconne alors que c'est A le coupable. Bref, sur certaines données "critique" et utilisée uniquement en read-only, je me dis que ca sera pas mal, un truc de ce genre (pour spotter plus vite les merdes)

Reply

Marsh Posté le 11-01-2005 à 21:36:11    

ah d'acoord !
ben c'est pas en changeant les permissions des "données" en mémoire que ça réglera le probleme. Ca fera peut etre un SIGSEGV plus rapidement encore !  
On ne peut pas faire grand chose si A (le code merdique) provoque un dépasement de tampon, ou écrit à une mauvaise adresse ...
Je vois plusieurs solutions :
1 - changer de crémerie :D
2 - changer de langage.
3 - fesser le programmeur de A et lui faire expier ses méfaits.

Reply

Marsh Posté le 11-01-2005 à 21:51:39    

jsutement, aevc un SIGSEV plus rapide on a plus facile a cerner le pb, car ca plantera la ou ca ecrit de travers, pas 10ans apres

Reply

Marsh Posté le 11-01-2005 à 22:10:07    

ça peut se faire ...
Mais je pense qu'un débogueur, ou/et un cerveau humain branché sont une meilleure alternative !

Reply

Marsh Posté le 11-01-2005 à 22:20:03    

Pour le cerveau humain branché, je dis direct non, et ta remarque est insultante envers mes collegues [:petrus75]. les conenries tout le monde en fait, surtout quand y commence a voir des kg de code
pour le debuggueur, je ne re-commencerais pas un débat sur linux non plus, j'en sors [:petrus75]
 
bref [:petrus75]

Reply

Marsh Posté le 11-01-2005 à 22:21:40    

Valgrind ?

Reply

Marsh Posté le 11-01-2005 à 22:22:32    

yep, on l'utilise, mais assez solution de dernier ecours : nos traitement sont assez lourd et le lancer sous valgrind prends parfois un certain tps (meme en strippant l'inutile)

Reply

Marsh Posté le 11-01-2005 à 22:34:11    

ouais, tout le monde fait des conneries, c'est clair.
Je voulais dire que pour trouver les erreurs de corruptions de pile, tas, tout ce qu'on veux, il faut vraiment mettre le cerveau sur ON. Chose que l'on ne peut malheureusement pas faire 8h durant!
Pour le débogugeur, ça sert vachement quand il y a un SIGSEGV, tu sais tout de suite ou se trouve l'erreur.

Reply

Marsh Posté le 11-01-2005 à 22:35:30    

bin chui d'accord pour le debuggueur, hein, le pb, c'est le debuggueur en lui meme, justement [:petrus75] (je fais de frequente crise de nostalgie de mon VS adoré)

Reply

Marsh Posté le 11-01-2005 à 22:47:48    

tachons de résister au trol :)

Reply

Marsh Posté le 11-01-2005 à 22:49:18    

c'est dur, c'est dur [:petrus75]
.
.
.
.
.
.
.
.
.
.
.
.
paske quand meme, le debuggueur a vs, c'est le pied comparé a cette me^@#]#^#^#^]#
.
.
.
.
.
.
.
.
.
.
 
j'ai resisté [:petrus75]
 
 
 

Reply

Marsh Posté le 11-01-2005 à 22:49:54    

ban  :o

Reply

Marsh Posté le 11-01-2005 à 22:57:54    


 :lol:

Reply

Marsh Posté le 11-01-2005 à 22:59:02    

bon les enfants la récrés est finie [:petrus75]

Reply

Marsh Posté le 11-01-2005 à 23:03:02    

sinon pq mprotect ne satisfait pas tes vils désires ?


Message édité par push le 11-01-2005 à 23:03:25
Reply

Marsh Posté le 11-01-2005 à 23:03:44    

20 GOTO 10

Reply

Marsh Posté le 11-01-2005 à 23:05:14    

push a écrit :

sinon pq mprotect ne satisfait pas tes vils désires ?


 
 
sisi, il me caresse le sexe la [:petrus75]
 
par contre il semble preferable de l'utilisation en conjonction avec valloc plutot qu'un bete malloc

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed