OVH Cloud OVH Cloud

creation d'un minidebugger

11 réponses
Avatar
ouech
salut,

j'ai un petit probleme avec le mini debugger que je code. j'ai lu a peu
pres toute
la msdn sur le sujet mais je n'ai pas pu le resoudre.

ma boucle de debug est basee sur WaitForDebugEvent et ContinueDebugEvent
et ne
fait qu'imprimer les differents evenements ou exceptions. Ca marche tres
bien
lorsque je m'attache au process avec DebugActiveProcess mais avec certains
programmes (bizarrement pas tous...) lorsque je cree moi-meme le processus,
tout commence normalement mais apres quelques evenements je recois des
exceptions en continu, avec mon cpu a 100% et le programme en cours de
debug
est fige.

je pense que c'est la facon dont je cree le process etant donne que ca
marche
quand je m'y attache.

Je derive une classe de CWinThread, je la cree avec un constructeur public
redefini et j'appelle sa mathode CreateThread. Je cree le process (ou m'y
attache)
dans InitInstance et ma boucle de debug est dans la methode Run.

mon code pour creer le process :

STARTUPINFOsInfos;

bzero((void *)&sInfos, sizeof(sInfos));;
CString dir = params->path;
string tmp = params->path + " " + params->args;
dir.Replace(params->file, NULL);
if (!CreateProcess(NULL, (LPTSTR) tmp.c_str(),
NULL, NULL, FALSE, DEBUG_PROCESS,
NULL, dir, &sInfos, &pInfos))

merci pour votre aide,

--
lucas

10 réponses

1 2
Avatar
AMcD®
ouech wrote:

mon code pour creer le process :

STARTUPINFOsInfos;

bzero((void *)&sInfos, sizeof(sInfos));;
CString dir = params->path;
string tmp = params->path + " " + params->args;
dir.Replace(params->file, NULL);
if (!CreateProcess(NULL, (LPTSTR) tmp.c_str(),
NULL, NULL, FALSE, DEBUG_PROCESS,
NULL, dir, &sInfos, &pInfos))

merci pour votre aide,



DEBUG_PROCESS c'est pour le cas ou ton processus veut gérer plusieurs
plusieurs processus. Tu mets DEBUG_ONLY_THIS_PROCESS sinon. La doc dit
(DEBUG_PROCESS) :

If this flag is set, the calling process is treated as a debugger, and the
new process is debugged. The system notifies the debugger of all debug
events that occur in the process being debugged.
If you create a process with this flag set, only the calling thread (the
thread that called CreateProcess) can call the WaitForDebugEvent function.
Windows 95/98/Me: This flag is not valid if the new process is a 16-bit
application.

Et (DEBUG_ONLY_THIS_PROCESS ) :

If this flag is not set and the calling process is being debugged, the new
process becomes another process being debugged by the calling process's
debugger. If the calling process is not a process being debugged, no
debugging-related actions occur.

Enfin, si t'es en CUI, n'oublie pas CREATE_NEW_CONSOLE.

--
AMcD®
http://arnold.mcdonald.free.fr/
Avatar
ouech
Le Thu, 3 Mar 2005 13:36:22 +0100, AMcD® a écrit:

ouech wrote:

mon code pour creer le process :

STARTUPINFOsInfos;

bzero((void *)&sInfos, sizeof(sInfos));;
CString dir = params->path;
string tmp = params->path + " " + params->args;
dir.Replace(params->file, NULL);
if (!CreateProcess(NULL, (LPTSTR) tmp.c_str(),
NULL, NULL, FALSE, DEBUG_PROCESS,
NULL, dir, &sInfos, &pInfos))

merci pour votre aide,



DEBUG_PROCESS c'est pour le cas ou ton processus veut gérer plusieurs
plusieurs processus. Tu mets DEBUG_ONLY_THIS_PROCESS sinon. La doc dit
(DEBUG_PROCESS) :

If this flag is set, the calling process is treated as a debugger, and
the
new process is debugged. The system notifies the debugger of all debug
events that occur in the process being debugged.
If you create a process with this flag set, only the calling thread (the
thread that called CreateProcess) can call the WaitForDebugEvent
function.
Windows 95/98/Me: This flag is not valid if the new process is a 16-bit
application.

Et (DEBUG_ONLY_THIS_PROCESS ) :

If this flag is not set and the calling process is being debugged, the
new
process becomes another process being debugged by the calling process's
debugger. If the calling process is not a process being debugged, no
debugging-related actions occur.

Enfin, si t'es en CUI, n'oublie pas CREATE_NEW_CONSOLE.




merci mais ca n'a rien a voir. en fait ce qui est bizarre c'est que si je
creer
le process avec dwCreationFlag a 0, et que je m'attache ensuite au
processus
ca me fait la meme erreur. et comme en plus ca le fait qu'avec certain
logiciels..

je trouve ca vraiment bizarre. c'est comme si certaines operations au
debut du programme
ne pouvaient pas etre executees en mode debug , mais l'attachement apres
ces instruction
est possible. je me demande quel genre d'operation peut produire ce
resultat et pourquoi.
surtout que je lance mon debugger en user qui a les privileges
administrateur donc ca devrait
pas etre ca..

merci quand meme,

--
lucas
Avatar
AMcD®
ouech wrote:

merci mais ca n'a rien a voir.



J'en doute.

De toute façon, sans code, sans savoir l'OS, les patches, etc. ce sera quasi
impossible de t'aider. T'as essayé avec des debugger comme Olly ou Windbg
pour voir si ces problème apparaissent ? Sinon, essaye de regarder les
sources de divers debugguers. T'as aussi pas mal de trucs à lire ici :

http://www.codeproject.com/debug/

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Vincent Burel
"ouech" wrote in message
news:
Le Thu, 3 Mar 2005 13:36:22 +0100, AMcD® a


écrit:

merci mais ca n'a rien a voir. en fait ce qui est bizarre c'est que si je
creer
le process avec dwCreationFlag a 0, et que je m'attache ensuite au
processus
ca me fait la meme erreur. et comme en plus ca le fait qu'avec certain
logiciels..



Rem : certains logiciels sont protégé contre le debugging et ne permettent
pas que les outils/services usuels de debugging fonctionnent.

VB
Avatar
ouech
Le Fri, 4 Mar 2005 15:09:14 +0100, Vincent Burel
a écrit:


"ouech" wrote in message
news:
Le Thu, 3 Mar 2005 13:36:22 +0100, AMcD® a


écrit:

merci mais ca n'a rien a voir. en fait ce qui est bizarre c'est que si
je
creer
le process avec dwCreationFlag a 0, et que je m'attache ensuite au
processus
ca me fait la meme erreur. et comme en plus ca le fait qu'avec certain
logiciels..



Rem : certains logiciels sont protégé contre le debugging et ne
permettent
pas que les outils/services usuels de debugging fonctionnent.

VB






merci je men suis rendu compte en utilisant ollydbg qui fait plante les
meme programmes que mon mini debugger, c'est a dire gspot et acrobatreader.

merci pour votre aide,

--
lucas
Avatar
Alexandre
> Rem : certains logiciels sont protégé contre le debugging et ne permettent
pas que les outils/services usuels de debugging fonctionnent.

VB



ah ? Tu sais comment on fait ça, en pratique ? ça m'interesse !
Avatar
GG
bonjour,

Rem : certains logiciels sont protégé contre le debugging et ne
permettent pas que les outils/services usuels de debugging
fonctionnent. VB



ah ? Tu sais comment on fait ça, en pratique ? ça m'interesse !



On fait le tour du fonctionnement des debuggueurs les plus connus
et si il démarrent dans le gestionnaire de taches on les en empeches.

Pour Winice ou Softice c'est plus simple encore vous détectez si
le driver de softice est en memoire et vous ne démarrez pas votre
process, mais je trouve cela assez ridicule, car si quelqu'un souhaite
vraiment faire du reverse il prend un ICE physique avec la sonde
du processeur et là il n'y a rien qui résiste. Vous n'êtes pas capable
de le détecté puisque rien n'est installé sur la machine cible.
--
Cordialement.
GG.
Avatar
Vincent Burel
"GG" wrote in message
news:423ab066$0$28602$
bonjour,

>> Rem : certains logiciels sont protégé contre le debugging et ne
>> permettent pas que les outils/services usuels de debugging
>> fonctionnent. VB
>
> ah ? Tu sais comment on fait ça, en pratique ? ça m'interesse !

On fait le tour du fonctionnement des debuggueurs les plus connus
et si il démarrent dans le gestionnaire de taches on les en empeches.

Pour Winice ou Softice c'est plus simple encore vous détectez si
le driver de softice est en memoire et vous ne démarrez pas votre
process, mais je trouve cela assez ridicule, car si quelqu'un souhaite
vraiment faire du reverse il prend un ICE physique avec la sonde
du processeur et là il n'y a rien qui résiste. Vous n'êtes pas capable
de le détecté puisque rien n'est installé sur la machine cible.



oui, mais y'a d'autre moyen pour tromper le debugger (dont le moteur est une
fonction, ou mode de fonctionnement du processeur). et faire en sorte qu'il
se bloque ou qu'il ne fonctionne pas correctement... Pour les détail
pratique faut voir peut-être avec AMcD, moi je paye pour avoir ce genre de
protection, mais je n'y connais rien.

VB
Avatar
AMcD®
Vincent Burel wrote:

oui, mais y'a d'autre moyen pour tromper le debugger (dont le moteur
est une fonction, ou mode de fonctionnement du processeur). et faire
en sorte qu'il se bloque ou qu'il ne fonctionne pas correctement...



Oui, tu peux même leur faire afficher n'importe quoi...

Pour les détail pratique faut voir peut-être avec AMcD, moi je paye
pour avoir ce genre de protection, mais je n'y connais rien.



Chuis en grève !

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
GG
Bonjour,

Chuis en grève !



Moi non , mais pour une fois chuis d'accord.

--
Cordialement.
GG.
1 2