N-PN White-Hat Project
Arbre processus - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages compilés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=25)
+--- Sujet : Arbre processus (/showthread.php?tid=2976)

Pages : 1 2


Arbre processus - Kiwazaru - 06-05-2013

Yop,

En ce moment j'essaye de coder un programme qui listerais tout les processus et les associerais en fonction de leurs processus fils , sauf que j'ai un problème ... J'utilise CreateToolHelp32Snapshot pour lister tout les processus et PROCESSENTRY32 pour accéder aux options th32ProcessID, th32ParentProcessID. Le but en fait est donc de vérifier si le processus analysé ne contient pas des processus fils et donc après pouvoir les lister.

Cela peu paraître un peu abstrait pour certains donc je vais schématiser:
Code :
PROCESS NAME            PID                 PPID
process.exe             450
system                 482
csrss.exe                 500
explorer.exe             1503
>>    xchat.exe             1820                 1503
>>>>    skin.exe                 1850                1820
>>    skype.exe             1900                 1503
>>    programme.exe         2105                 1503
handle.exe                 2501
smss.exe                 3522
>> host.exe             3900                 3522
logs.exe                 4521

Les noms de processus & PID sont fictifs bien sûr :p

Quelqu'un aurait-il une idée de quel façon on pourrais lister tout ça car, par exemple si j'arrive sur explorer.exe, je détecte un processus fils nommé xchat.exe, mais là il faut aussi que je vérifie si xchat.exe contient des processus fils et ainsi de suite... Par exemple dans le cas du fork bombing (si je me trompe pas) ça foirerais complètement, car je me perdrait dans les sous processus etc sans être capable de revenir au processus initial qui était explorer.exe !

Bref, je me pose la question suivante: Est-ce possible? Je pense, mais je n'ai pas d'algo dans la tête :/

J'avais pensé à une mise en forme dans un fichier/buffer texte qu'on parserais pour retrouver le processus initial mais... j'arrive pas à me situer dans l'arbre :/


RE: Arbre processus - gruik - 06-05-2013

en bon disciple de MacYavel je dirais : récursivité ! Big Grin


RE: Arbre processus - Kiwazaru - 06-05-2013

J'ai aussi pensé à la récursivité mais... Comment tu mets ça en place? Ca change en rien le fait que tu ne puisses pas retrouver le processus initial :/


RE: Arbre processus - gruik - 07-05-2013

difficile de dire avec précision mais globalement on pourrait imaginer un pseudo-code de ce genre :
Code C :
fonction(pid) {
   if pid.children > 0 {
      for childpid in pid.children {
         print "<childpid> est un process fils de <pid>"
         fonction (childpid)
      }
   } else {
      print "<pid> est une feuille de l'arbre et n'a pas de processus fils"
   }
   return
}

main() {
   init_pid = 1 // sous linux tous les process mènent à init
   // je sais pas ce qu'il en est sous windows...
   fonction(init_pid)
}



RE: Arbre processus - supersnail - 07-05-2013

Sous win32 jcrois que tout est rattaché au process "[System]" (ou csrss.exe, qui gère les sessions win32)


RE: Arbre processus - Kiwazaru - 07-05-2013

gruik: Je veux bien pour ton code, mais comment tu fait par exemple si tu pars dans un triple sous process pour revenir à celui de base? (Ou alors c'est moi qui arrive pas à piger la notion :] )

supersnail: càd? Tu veux dire que j'pourrais gérer tout ça via System/Csrss.exe ?


RE: Arbre processus - InstinctHack - 07-05-2013

Reverse c'est pas à toi de gerer ça, la pile d'éxécution gère toute seule comme une grande.


RE: Arbre processus - supersnail - 07-05-2013

@ReVeRse: je parlais juste du process "père" de tous les process sous win32 Wink


RE: Arbre processus - Kiwazaru - 07-05-2013

Ah, donc en fait j'aurais juste à retourner sur System ? Ça pourrait être une solution :p

EDIT: En fait non, ça revient au même ! Par exemple si j'ai ->

process.exe
proc.exe
>> proces.exe
>>>> processs.exe
>>>> process.exe

proc.exe a comme process fils proces.exe mais proces.exe a DEUX processus fils, dont si je retourne directement au système j'aurais parsé que : proc.exe, proces.exe, processs.exe :/


RE: Arbre processus - InstinctHack - 07-05-2013

Code PYTHON :

def process(level=1):
        if level<5:
                if level+1<5:
                        print(("\t"*level)+"Je suis un process et v'la mes fils :")
                else:
                        print(("\t"*level)+"Je suis un process puceau")
                for i in range(3):
                        process(level+1)

process()

 

Plus con tu meurt

la sortie :
Code :
Je suis un process et v'la mes fils :
                Je suis un process et v'la mes fils :
                        Je suis un process et v'la mes fils :
                                Je suis un process puceau
                                Je suis un process puceau
                                Je suis un process puceau
                        Je suis un process et v'la mes fils :
                                Je suis un process puceau
                                Je suis un process puceau
                                Je suis un process puceau
                        Je suis un process et v'la mes fils :
                                Je suis un process puceau
                                Je suis un process puceau
                                Je suis un process puceau
                Je suis un process et v'la mes fils :
                        Je suis un process et v'la mes fils :
                                Je suis un process puceau
                                Je suis un process puceau
                                Je suis un process puceau
                        Je suis un process et v'la mes fils :
                                Je suis un process puceau
                                Je suis un process puceau
                                Je suis un process puceau
                        Je suis un process et v'la mes fils :
                                Je suis un process puceau
                                Je suis un process puceau
                                Je suis un process puceau
                Je suis un process et v'la mes fils :
                        Je suis un process et v'la mes fils :
                                Je suis un process puceau
                                Je suis un process puceau
                                Je suis un process puceau
                        Je suis un process et v'la mes fils :
                                Je suis un process puceau
                                Je suis un process puceau
                                Je suis un process puceau
                        Je suis un process et v'la mes fils :
                                Je suis un process puceau
                                Je suis un process puceau
                                Je suis un process puceau



RE: Arbre processus - Creepy_p0ney - 07-05-2013

@ReVerSe pour le code de gruik : la récursivité dude :p
pour chaque processus fils la fonction s'appelle, si il ya encore des processus fils elle s'appelle, puis se termine dans l'ordre où elle a été appelée


RE: Arbre processus - InstinctHack - 07-05-2013

je dirais dans le sens inverse en fait... :]


RE: Arbre processus - Creepy_p0ney - 07-05-2013

ah oui :p j'ai hesité (putain ça fait deux fois que j'dis ça aujourd'hui) au bout de trois ça va plus passer


RE: Arbre processus - Kiwazaru - 08-05-2013

Creepy_P0ney: "@ReVerSe pour le code de gruik : la récursivité dude Tongue
pour chaque processus fils la fonction s'appelle, si il ya encore des processus fils elle s'appelle, puis se termine dans l'ordre où elle a été appelée ", j'vais essayer on va bien voir Smile

Khaled: J'vais essayer de porter ça en C on va voir Wink

PS: J'avais mal interprété ton message au début khaled x)


RE: Arbre processus - Sh4dows - 08-05-2013

A savoir que suivant ce que tu fais avec la récursivité tu peux SoF (Stack OverFlow)
Donc essaye de gérer le truc comme il se doit Smile