2011-07-14 3 views
1

Possible en double:
Windows Program: How to snoop on command line arguments?Identification Arguments de ligne de commande

Je travaille sous Windows XP.

J'ai reçu un logiciel tiers qui engendre plusieurs processus lors de son lancement. J'ai été chargé d'écrire un remplacement pour ce logiciel, mais je devrai conserver un de ses processus (un «serveur de communication» qui transmet/reçoit des messages de/aux «serveurs de communication» identiques sur d'autres machines en réseau). Une petite partie de ce processus consiste à apprendre à démarrer le "serveur de communication" directement. Si je commence juste avec aucun argument de la ligne de commande, il meurt immédiatement. Je pense qu'il a besoin d'arguments. Donc, toute ma question se résume à est ...

Est-il possible, pour tout processus arbitraire, de voir avec quels arguments il a été démarré? Si oui, comment puis-je le faire?

J'ai essayé d'attacher Visual Studio 2010, mais il n'y a pas de .pdb, donc je n'ai rien. Malheureusement, je ne sais pas dans quelle langue ce "serveur de communication" est écrit. Donc, c'était vraiment un longhot. (Je ne savais pas si cela me donnerait un moyen de trouver les arguments de toute façon, mais je pensais que ça valait la peine d'essayer.)

Merci, Dave

post-scriptum Désolé pour le mauvais choix de tags. C'est un difficile à catégoriser ...

+0

Si vous voulez le faire par programme, il existe une API non documentée (?) 'NtQueryInformationProcess' qui vous permet d'interroger l'adresse du PEB, qui contient également la ligne de commande d'origine (ReadProcessMemory') . – ruslik

Répondre

3

Process Explorer les affiche. Faites un clic droit sur un processus dans la liste, puis Properties... ->Image ->Command line

Ce n'est pas fiable à 100%, car le processus peut remplacer le tampon contenant la ligne de commande, mais le plus souvent cela fonctionne.

2

Process explorer vous permettra de voir les arguments de ligne de commande pour un processus d'exécution donné :)

+0

tirer, trop lent – aL3891

0

Vous n'avez pas besoin de l'APB pour l'application elle-même. Les DLL Windows ont des PDB; mettre un point d'arrêt sur CreateProcess et des variantes comme ShellExecute/CreateProcessAsUser.