[Résolu] WinASM: comment utiliser GetCommandLine?

Tout sur les langages de programmation.

[Résolu] WinASM: comment utiliser GetCommandLine?

Messagepar Duke49 » 31 Mars 2012, 18:32

Salut à tous,

Je souhaite quitter le programme si l'argument n'est pas obligatoirment /run.
Mon code ne fonctionne pas, il quitte tout le temps, vous sauriez quoi faire ?. :oops:

Code: Tout sélectionner
DATA
CommandOK      DB "/run", 0

.DATA?
hInstance         HINSTANCE ?
CommandLine      LPSTR ?

.CODE
Start:
   Invoke GetModuleHandle, NULL
   MOV hInstance,EAX
   Invoke GetCommandLine
   mov CommandLine, eax
   lea ebx, offset CommandOK
   cmp al, bl   
   jne NoCmd
   Invoke WinMain, hInstance, NULL, NULL, SW_HIDE
   NoCmd:
   Invoke ExitProcess,EAX
Dernière édition par Duke49 le 01 Avril 2012, 08:47, édité 1 fois.
INT 3
Avatar de l’utilisateur
Duke49
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 101
Inscription: 16 Décembre 2010, 21:22

Re: WinASM: comment utiliser GetCommandLine?

Messagepar Bango » 31 Mars 2012, 18:56

Pour info, GetCommandLine retournera (dans EAX) un pointeur vers la string sur la ligne de commande du processus en cours :roll:

Débeugue ton exe, tu comprendras mieux le principe.
Sinon à quoi te sert cette ligne ?
Code: Tout sélectionner
mov CommandLine, eax

Vu que tu n'utilises pas la variable "CommandLine" ensuite ?

Ensuite le CMP AL,BL ne fait que de comparer la fin de l'adresse de chaque pointeur, donc des adresses qui contiennent les strings... il y a peu de chance que ce soit égal, sauf coup de bol :P
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1527
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: WinASM: comment utiliser GetCommandLine?

Messagepar Todd » 31 Mars 2012, 19:41

PaPa Bango a écrit:il y a peu de chance que ce soit égal, sauf coup de bol :P
1 chance sur 256 ! :lol:

Moi je vois aussi un autre problème que tu risques de rencontrer ! :roll: Car si le "slash" peut servir parfois à passer un argument, je doute qu'il fasse partie de cet argument ! :shock:

J'aurais mis simplement :
Code: Tout sélectionner
DATA
CommandOK      DB "run", 0
Ça reste à vérifier, mais tu devrais surveiller ce point. :wink:

Todd
Avatar de l’utilisateur
Todd
Modérateur
Modérateur
 
Messages: 1795
Inscription: 19 Avril 2009, 12:11

Re: WinASM: comment utiliser GetCommandLine?

Messagepar Duke49 » 01 Avril 2012, 08:38

On devrait développer avec un debugger ^^
En suivant les conseils de PaPa, après GetCommandLine, j'ai Eax = "...\test.exe" run"

Donc j'ai essayé ceci qui ne fonctionne pas:
Code: Tout sélectionner
Start:
   Invoke GetModuleHandle, NULL
   MOV hInstance,EAX
   Invoke GetCommandLine   ;_argc - number of args, _argv - ptr to arg table
   mov   [_argc],0
   xor   ebx,ebx
   cmp byte ptr [eax],22h  ;quotation mark
   jne NoCmd
   mov   [_argc],1
   push eax
       
   cmp byte ptr [eax],20h  ;space
   jne NoCmd
       
          inc eax
   cmp byte ptr  [eax],72h  ; r
   jne NoCmd
       
   inc eax
   cmp byte ptr [eax],20h  ; u
   jne NoCmd
   
   inc eax
   cmp byte ptr [eax],20h  ; n
   jne NoCmd


Pis dans le debuggeur je me suis rendu compte qu'il manquait une boucle pour arriver jusqu'a
la commande line et traiter le ( / ) de Todd en byte ^^ alors ...
Code: Tout sélectionner
.Data?
_arg             dd ?

Start:
   Invoke GetModuleHandle, NULL
   MOV hInstance,EAX
   Invoke GetCommandLine   ;_argc - number of args, _argv - ptr to arg table
   mov   [_arg], EAX
   xor ebx,ebx
   push eax
   
   LoopCmd:
   inc eax
   cmp byte ptr [eax],22h  ; "
   jne LoopCmd
   
   inc eax
   cmp byte ptr [eax],20h  ; space
   jne NoCmd
       
   inc eax
   cmp byte ptr  [eax],2Fh  ; /
   jne NoCmd
   
          inc eax
   cmp byte ptr  [eax],72h  ; r
   jne NoCmd
       
   inc eax
   cmp byte ptr [eax],75h  ; u
   jne NoCmd
   
   inc eax
   cmp byte ptr [eax],6Eh  ; n
   jne NoCmd
           
           MOV EAX, [_arg] ; restore argument line for WinMain *3
           MOV [_arg], NULL
           PUSH EAX


Voilà ça work :D

J'aurais préféré faire une comparaison entre deux LPSTR mais bon, la flemme :boulet:
Le byte / byte a un côté clair :wink:

Merci les mecs !
+2
INT 3
Avatar de l’utilisateur
Duke49
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 101
Inscription: 16 Décembre 2010, 21:22

Re: [Résolu] WinASM: comment utiliser GetCommandLine?

Messagepar Duke49 » 01 Avril 2012, 09:22

Voila l'exe le cadeau compilé pour vos oreilles ^^
command 8) : "stubxm.exe" /run"

Taille (ntfs/hdd): 112 Ko (114 688 octets)
Code: Tout sélectionner
hxxp://www.mediafire.com/?db7pnyuo4o17xww


Ne me demandez pas pourquoi ^^, pour le fermer tuer le process stubxm.exe
INT 3
Avatar de l’utilisateur
Duke49
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 101
Inscription: 16 Décembre 2010, 21:22

Re: [Résolu] WinASM: comment utiliser GetCommandLine?

Messagepar Todd » 01 Avril 2012, 11:46

Duke49 a écrit:Ne me demandez pas pourquoi ^^, pour le fermer tuer le process stubxm.exe
Simplement parce que tu n'as pas prévu de sortie ! :shock: C'est pas plus compliqué que ça :wink: ... en général, un programme n'improvise pas :?, mais fait exactement ce pourquoi tu l'as programmé ! :roll:

Todd
Avatar de l’utilisateur
Todd
Modérateur
Modérateur
 
Messages: 1795
Inscription: 19 Avril 2009, 12:11

Re: [Résolu] WinASM: comment utiliser GetCommandLine?

Messagepar Duke49 » 01 Avril 2012, 12:16

Todd a écrit:Simplement parce que tu n'as pas prévu de sortie ! :shock: ...

Vi Todd :lol:
Je pilote le processus avec du .net.
INT 3
Avatar de l’utilisateur
Duke49
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 101
Inscription: 16 Décembre 2010, 21:22


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités