return to tranceaddict TranceAddict Forums Archive > Local Scene Info / Discussion / EDM Event Listings > Europe > Europe - France

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 [122] 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 
[HS] Pb techniques Hardware/Softwares/Internet... (pg. 122)
View this Thread in Original format
PyrofraG
quote:
Originally posted by Eddy
Il y a des personnes qui s'y connaissent en kernel linux , appel systemes ?
J'ai un morceau de code que je comprend pas, je le met au cas ou.

code:
void *get_system_call(void) { unsigned char idtr[6]; unsigned long base; struct idt_descriptor desc; asm ("sidt %0" : "=m" (idtr)); base = *((unsigned long *) &idtr[2]); memcpy(&desc, (void *) (base + (0x80*8)), sizeof(desc)); return((void *) ((desc.off_high << 16) + desc.off_low)); }


Si quelqu'un peut m'expliquer la fonction ce serait cool!:toocool:


Si j'ai bien compris :
asm ("sidt %0" : "=m" (idtr))
Tu appelles une fonction assembleur en utilisant la variable idtr pour te simplifier la vie (tu évites de stocker ta variable dans des registres.

http://www.ibiblio.org/gferg/ldp/GC...mbly-HOWTO.html

Ensuite le coup du (unsigned long *) &idtr[2] j'avoue ne pas comprendre la subtilité de faire un pointeur sur un pointé pour moi l' * et le & s'annulent...., je dirais donc que base récupère la valeur de l'adresse du tableau itdr sur le 3ème élément.

Ensuite il copie dans la structure desc le contenu de base à l'adresse base+0x80*8 jusqu'à la taille de desc.

Enfin il retourne un pointeur sur ta structure desc pour lequel il récupère la valeur haute en faisant un décallage de 16 bits et en ajoutant la valeur basse.

En gros ton desc est composé de deux entier de 16bits et ta fonction retourne un 32bits.

Je suppose que ça rend la valeur de l'appel système qui a eu lieu avec la fonction assembleur sidt %0 (%0 c'est le programme que tu exécutes si je ne me trompes pas sous Linux).

Bien sûr je ne garantie pas à 100%, j'suis pas un as en prog ici et quand je vois ça je me dis que j'ai bien fait de ne pas trop chercher à faire de la dev finalement :clown: :clown:
Insigma
Qd je vois ça, plus ça va, moins j'ai envie de faire de l'info...

J'ai envie de me lancer ds ma propre entreprise... J'ai une idée, pourvu qu'elle soit bonne.. Et encore faudrait-il franchir le pas, vu les risques. Tiens v ouvrir un thread.
Kartman
quote:
Originally posted by Insigma
Qd je vois ça, plus ça va, moins j'ai envie de faire de l'info...



Pas de l'info ca ! Le C est la programmation ce que le minitel est a internet.

Un ancetre respectable qui sert d'exemple.
birante
'tin jveux emuler un .iso avec deamon tools et comprend po, j'ai suivi les étapes indiquées sur un site et il se passe nada.:conf:
Quand je vais dans le poste de travail sur ce qui est censé être le lecteur virtuel, me sort que cette daube de windows ne le détecte po... si y'en a qui ont déjà eu ce genre de problème, faites moi signe ;)
Kartman
quote:
Originally posted by birante
'tin jveux emuler un .iso avec deamon tools et comprend po, j'ai suivi les étapes indiquées sur un site et il se passe nada.:conf:
Quand je vais dans le poste de travail sur ce qui est censé être le lecteur virtuel, me sort que cette daube de windows ne le détecte po... si y'en a qui ont déjà eu ce genre de problème, faites moi signe ;)



- Essaies de redémarrer
- Vérifies que t'as bien mis au moins 1 Virtual Drive actif


Ca a toujours marché impec chez moi.
JoeHell
quote:
Originally posted by Kartman
Pas de l'info ca ! Le C est la programmation ce que le minitel est a internet.

Ah, on voit les winners qui jurent que par VB ou Delphy :whip:

Depuis que j'ai mon nouveau taf, je rêverais de maintenir l'appli du boulot en C++ au lieu de ce VBA de merde dont le fonctionnement interne tient plus de l'aléatoire que de la logique !

En C++ au moins on peut coder proprement... et proprement, ça veut pas dire utiliser toutes les options du compilateur obligatoirement.
dansal62
quote:
Originally posted by _greggy_
déjà le C c'est imbouffable, mais avec du code assembleur au milieu ça fout la gerbe direct :toothless

+1 :toothless

In Java We Trust :p
Eddy
Pour faire un rootkit le C c'est mieux :p
chasis.fan
quote:
Originally posted by dansal62
+1 :toothless

In Java We Trust :p

Tu m'étonnes :o

C'est clair que c'est pas le meme monde les langages de haut niveau style Java / DotNet et ce genre de bout de code en C avec appel de portion en ASM :nervous:
Eddy
Merci pyro pour ton début d'explication, en faite le problème c'est cette table des interruptions, j'arrive pas a voir comment elle est? Et ce qu'il fabrique avec et ensuite il s'en sert pour trouves les sys call , c'est puissant :p
Allez je vous met le code qui suit je sais que vous aimez!

code:
/* averiguar sys_call_table */ s_call = get_system_call(); sys_call_table = get_sys_call_table(s_call);

code:
void *get_system_call(void) { unsigned char idtr[6]; unsigned long base; struct idt_descriptor desc; //Enregistre le sidt a l'adresse de idtr =m = indique une sortie de type mémoire (ce n'est pas un registre asm ("sidt %0" : "=m" (idtr)); //idt est la table de description des interruption base = *((unsigned long *) &idtr[2]); memcpy(&desc, (void *) (base + (0x80*8)), sizeof(desc)); return((void *) ((desc.off_high << 16) + desc.off_low)); } /*********** fin get_sys_call_table() ***********/ void *get_sys_call_table(void *system_call) { unsigned char *p; unsigned long s_c_t; p = (unsigned char *) system_call; while (!((*p == 0xff) && (*(p+1) == 0x14) && (*(p+2) == 0x85))) p++; dire_call = (unsigned long) p; p += 3; s_c_t = *((unsigned long *) p); p += 4; after_call = (unsigned long) p; /* cli */ while (*p != 0xfa) p++; dire_exit = (unsigned long) p; return((void *) s_c_t); } /********** fin get_sys_call_table() *************/

_greggy_
un truc génial a été inventé : les commentaires dans le code :rolleyes: :rolleyes:
birante
merci Kart ;)
CLICK TO RETURN TO TOP OF PAGE
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 [122] 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 
Privacy Statement