Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
Cmd en compilateur
Auteur Message
Répondre en citant
Message Cmd en compilateur 
Bonjour à tous !

Voilà, j'ai pas mal de projet de jeu en batch mais j'ai une petite limitation : les performances !

Dans le monde de la programmation, il y a deux types de langages de programmation :
- Les langages interpréter
- Les langages compiler

Vous pouvez voir la différence ici entre les deux (ça évite que j’explique tout ^^)

Comme tout le monde (ou pas) le sait, le batch est un langage interpréter, c'est à dire qu'il lit les commandes les unes après les autres, contrairement au language tel que le C++ qui à besoin d'un compilateur pour transformer le code source en code binaire.
La différence entre un interpréteur et un compilateur est que l'interpréteur "compile le code" (il lit les commandes plutôt) en temps réel, contrairement au compilateur qui à créé un fichier en binaire lisible directement par l'ordinateur sans passer par un autre programme (d'ou un gain ÉNORME de performances !)

Et CMD est l'interpréteur du batch, c'est lui qui lit les commandes les une après les autres ...

A partir de là, je me suis dit que Cmd est un compilateur en temps réel (ce qui est logique car il traduit en fait chaque commande du fichier batch en binaire)

Du coup voici ma question : Peut on, si on arrive à savoir ce que fait CMD pour chaque commande en batch, créé un compilateur basé sur les action de CMD, qui compile du code batch en binaire (comme un compilateur c++)

(Certains pourrait penser qu'il s'agit de créé un "Bat to EXE", pas du toût car un "Bat to EXE" ne compile pas vraiment le batch, il ne l'insère que dans un fichier .exe)

Voilu ! JOYEUX NOËL à tous ! ^^




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Cmd en compilateur 
Je crois que j'ai réussi à décompiler cmd.exe (sous windows 7) et je crois que c'est du c :

Wink Mr. Green Razz Laughing


Code:

// address: 0x4ad08271
int main(int ??, char *argv[], char *envp[]) {
    union { unsigned int x1; __size32 * x2; } eax;       // r24
    union { unsigned int x1; __size32 * x2; } eax_1;       // r24
    union { unsigned int x1; __size32 * x2; } eax_2;       // r24
    union { unsigned int x1; __size32 * x2; } eax_4;       // r24
    __size32 ebp;       // r29
    union { void * x3; int x4; } ebp_1;       // r29
    union { void * x3; int x4; } ebp_2;       // r29
    union { void * x3; int x4; } ebp_3;       // r29
    __size32 ecx;       // r25
    __size32 edi;       // r31
    __size32 esi;       // r30
    union { unsigned int x1; __size32 * x2; } esi_1;       // r30
    union { unsigned int x1; __size32 * x2; } esi_2;       // r30
    union { unsigned int x1; __size32 * x2; } esi_3;       // r30
    union { unsigned int x1; __size32 * x2; } esi_5;       // r30
    union { unsigned int x1; __size32 * x2; } esi_6;       // r30
    void *esp;       // r28
    __size32 *esp_1;       // r28{37}
    __size32 *esp_2;       // r28{47}
    __size32 *esp_3;       // r28{6}
    __size32 *esp_4;       // r28{23}
    union { unsigned int x1; __size32 * x2; } local0;       // m[esp + 4]
    __size32 local10;       // m[esp - 4]{61}
    int local11;       // m[esp - 4]{23}
    __size32 local12;       // m[esp - 8]{60}
    __size32 local13;       // m[esp - 8]{62}
    int local14;       // m[esp - 8]{23}
    union { unsigned int x1; __size32 * x2; } local15;       // eax_1{35}
    __size32 *local16;       // esp_1{37}
    union { void * x3; int x4; } local17;       // ebp_2{38}
    union { unsigned int x1; __size32 * x2; } local18;       // esi_2{39}
    __size32 local19;       // local9{59}
    __size32 local20;       // local12{60}
    union { unsigned int x1; __size32 * x2; } local21;       // local3{63}
    union { unsigned int x1; __size32 * x2; } local22;       // eax_2{45}
    __size32 *local23;       // esp_2{47}
    union { void * x3; int x4; } local24;       // ebp_3{48}
    union { unsigned int x1; __size32 * x2; } local25;       // esi_5{49}
    __size32 local26;       // local10{61}
    __size32 local27;       // local13{62}
    union { unsigned int x1; __size32 * x2; } local28;       // local4{64}
    union { unsigned int x1; __size32 * x2; } local3;       // m[esp + 4]
    union { unsigned int x1; __size32 * x2; } local4;       // m[esp + 4]
    int local8;       // m[esp + 4]{23}
    __size32 local9;       // m[esp - 4]{59}

    local9 = ebp;
    ebp_1 = esp - 4;
    local12 = esi;
    esp_3 = esp - 8;
    esi_1 = local0;
    eax = 0;
    local15 = eax;
    local16 = esp_3;
    local17 = ebp_1;
    local18 = esi_1;
    local19 = local9;
    local20 = local12;
    local21 = local0;
    eax_1 = local15;
    esp_1 = local16;
    ebp_2 = local17;
    esi_2 = local18;
    local9 = local19;
    local12 = local20;
    local3 = local21;
    local22 = eax_1;
    local23 = esp_1;
    local24 = ebp_2;
    local25 = esi_2;
    local26 = local9;
    local27 = local12;
    local28 = local3;
    while ( !(esi_2 >= *(ebp_2 + 12) || eax_1 != 0)) {
        ecx = *esi_2;
        if (ecx != 0) {
            (*ecx)(local12, local9, local3, argv, envp, eax_1, ecx, ebp_2, esi_2, edi, LOGICALFLAGS32(ecx), LOGICALFLAGS32(ecx), LOGICALFLAGS32(ecx));
            local22 = eax_4;
            local23 = esp_4;
            local24 = ebp;
            local25 = esi_6;
            local26 = local11;
            local27 = local14;
            local28 = local8;
        }
        eax_2 = local22;
        esp_2 = local23;
        ebp_3 = local24;
        esi_5 = local25;
        local10 = local26;
        local13 = local27;
        local4 = local28;
        esi_3 = esi_5 + 4;
        local15 = eax_2;
        local16 = esp_2;
        local17 = ebp_3;
        local18 = esi_3;
        local19 = local10;
        local20 = local13;
        local21 = local4;
        eax_1 = local15;
        esp_1 = local16;
        ebp_2 = local17;
        esi_2 = local18;
        local9 = local19;
        local12 = local20;
        local3 = local21;
        local22 = eax_1;
        local23 = esp_1;
        local24 = ebp_2;
        local25 = esi_2;
        local26 = local9;
        local27 = local12;
        local28 = local3;
    }
    return eax_1;
}



Code:

*forced* { int r24 } main(int argc m[r28 + 4], char *[] * argv m[r28 + 8], char *[] * envp m[r28 + 12])
in cluster cmd

parameters: i32 m[r28 + 4], [c*]* argv, [c*]* envp
end parameters
locals: union { unsigned int x1; __size32 * x2; } eax r24 union { unsigned int x1; __size32 * x2; } eax_1 r24 union { unsigned int x1; __size32 * x2; } eax_2 r24 union { unsigned int x1; __size32 * x2; } eax_3 r24 union { unsigned int x1; __size32 * x2; } eax_4 r24 union { unsigned int x1; __size32 * x2; } eax_5 r24 __size32 eax_6 r24{34} __size32 ebp r29 union { void * x3; /*signed?*/int x4; } ebp_1 r29 union { void * x3; /*signed?*/int x4; } ebp_2 r29 union { void * x3; /*signed?*/int x4; } ebp_3 r29 union { void * x3; /*signed?*/int x4; } ebp_4 r29 __size32 ecx r25 __size32 edi r31 __size32 esi r30 union { unsigned int x1; __size32 * x2; } esi_1 r30 union { unsigned int x1; __size32 * x2; } esi_2 r30 union { unsigned int x1; __size32 * x2; } esi_3 r30 union { unsigned int x1; __size32 * x2; } esi_4 r30 union { unsigned int x1; __size32 * x2; } esi_5 r30 union { unsigned int x1; __size32 * x2; } esi_6 r30 void * esp r28 __size32 * esp_1 r28{37} __size32 * esp_2 r28{47} __size32 * esp_3 r28{6} __size32 * esp_4 r28{23} union { unsigned int x1; __size32 * x2; } local0 m[esp + 4] __size32 local1 m[esp - 4] __size32 local10 m[esp - 4]{61} void local11 m[esp - 4]{23} __size32 local12 m[esp - 8]{60} __size32 local13 m[esp - 8]{62} void local14 m[esp - 8]{23} union { unsigned int x1; __size32 * x2; } local15 eax_1{35} __size32 * local16 esp_1{37} union { void * x3; /*signed?*/int x4; } local17 ebp_2{38} union { unsigned int x1; __size32 * x2; } local18 esi_2{39} __size32 local19 local9{59} __size32 local2 m[esp - 8] __size32 local20 local12{60} union { unsigned int x1; __size32 * x2; } local21 local3{63} union { unsigned int x1; __size32 * x2; } local22 eax_2{45} __size32 * local23 esp_2{47} union { void * x3; /*signed?*/int x4; } local24 ebp_3{48} union { unsigned int x1; __size32 * x2; } local25 esi_5{49} __size32 local26 local10{61} __size32 local27 local13{62} union { unsigned int x1; __size32 * x2; } local28 local4{64} union { unsigned int x1; __size32 * x2; } local3 m[esp + 4] union { unsigned int x1; __size32 * x2; } local4 m[esp + 4] union { unsigned int x1; __size32 * x2; } local5 m[esp + 4] void local6 m[esp + 8] void local7 m[esp + 12] void local8 m[esp + 4]{23} __size32 local9 m[esp - 4]{59}
end locals
symbols: r24 maps to eax type union { unsigned int x1; __size32 * x2; }
r24 maps to eax_1 type union { unsigned int x1; __size32 * x2; }
r24 maps to eax_2 type union { unsigned int x1; __size32 * x2; }
r24 maps to eax_3 type union { unsigned int x1; __size32 * x2; }
r24 maps to eax_4 type union { unsigned int x1; __size32 * x2; }
r24 maps to eax_5 type union { unsigned int x1; __size32 * x2; }
r25 maps to ecx type __size32
r28 maps to esp type void *
r29 maps to ebp type __size32
r29 maps to ebp_1 type union { void * x3; /*signed?*/int x4; }
r29 maps to ebp_2 type union { void * x3; /*signed?*/int x4; }
r29 maps to ebp_3 type union { void * x3; /*signed?*/int x4; }
r29 maps to ebp_4 type union { void * x3; /*signed?*/int x4; }
r30 maps to esi type __size32
r30 maps to esi_1 type union { unsigned int x1; __size32 * x2; }
r30 maps to esi_2 type union { unsigned int x1; __size32 * x2; }
r30 maps to esi_3 type union { unsigned int x1; __size32 * x2; }
r30 maps to esi_4 type union { unsigned int x1; __size32 * x2; }
r30 maps to esi_5 type union { unsigned int x1; __size32 * x2; }
r30 maps to esi_6 type union { unsigned int x1; __size32 * x2; }
r31 maps to edi type __size32
m[esp + 4] maps to local0 type union { unsigned int x1; __size32 * x2; }
m[esp + 4] maps to local3 type union { unsigned int x1; __size32 * x2; }
m[esp + 4] maps to local4 type union { unsigned int x1; __size32 * x2; }
m[esp + 4] maps to local5 type union { unsigned int x1; __size32 * x2; }
m[esp + 8] maps to local6 type void
m[esp + 12] maps to local7 type void
m[esp - 4] maps to local1 type __size32
m[esp - 8] maps to local2 type __size32
r24{34} maps to eax_6 type __size32
r28{37} maps to esp_1 type __size32 *
r28{47} maps to esp_2 type __size32 *
r28{23} maps to esp_4 type __size32 *
r28{6} maps to esp_3 type __size32 *
m[esp + 4]{0} maps to argc type int
m[esp + 4]{23} maps to local8 type void
m[esp + 8]{0} maps to argv type char *[] *
m[esp + 12]{0} maps to envp type char *[] *
m[esp - 4]{59} maps to local9 type __size32
m[esp - 4]{61} maps to local10 type __size32
m[esp - 4]{23} maps to local11 type void
m[esp - 4]{2} maps to local9 type __size32
m[esp - 8]{60} maps to local12 type __size32
m[esp - 8]{62} maps to local13 type __size32
m[esp - 8]{23} maps to local14 type void
m[esp - 8]{5} maps to local12 type __size32
eax_1{35} maps to local15 type union { unsigned int x1; __size32 * x2; }
eax_2{45} maps to local22 type union { unsigned int x1; __size32 * x2; }
ebp_2{38} maps to local17 type union { void * x3; /*signed?*/int x4; }
ebp_3{48} maps to local24 type union { void * x3; /*signed?*/int x4; }
esi_2{39} maps to local18 type union { unsigned int x1; __size32 * x2; }
esi_5{49} maps to local25 type union { unsigned int x1; __size32 * x2; }
esp_1{37} maps to local16 type __size32 *
esp_2{47} maps to local23 type __size32 *
local10{61} maps to local26 type __size32
local12{60} maps to local20 type __size32
local13{62} maps to local27 type __size32
local3{63} maps to local21 type union { unsigned int x1; __size32 * x2; }
local4{64} maps to local28 type union { unsigned int x1; __size32 * x2; }
local9{59} maps to local19 type __size32

end symbols
live variables: r28, r29, r30, r31, m[r28{-} + 4]
end live variables
Fall BB: in edges: out edges: 4ad0827c
00000000
0
*32* edi := -

0
*v** esp := -

0
*32* ebp := -

0
*32* esi := -

0
*union* local0 := -
4ad08271
1
*32* edi := edi
4ad08273
2
*32* local9 := ebp
4ad08274
4
*union* ebp_1 := esp - 4
4ad08276
5
*32* local12 := esi

6
*32** esp_3 := esp - 8
4ad08277
7
*union* esi_1 := local0
4ad0827a
8
*union* eax := 0

0
*v* local15 := eax

0
*v* local16 := esp_3

0
*v* local17 := ebp_1

0
*v* local18 := esi_1

0
*v* local19 := local9

0
*v* local20 := local12

0
*v* local21 := local0

L3: Twoway BB: in edges: 4ad0827a 4ad08290 out edges: 4ad08292 4ad08285
00000000
35
*union* eax_1 := local15

37
*32** esp_1 := local16

38
*union* ebp_2 := local17

39
*union* esi_2 := local18

59
*32* local9 := local19

60
*32* local12 := local20

63
*union* local3 := local21
4ad0827c


4ad0827f
12
BRANCH 0x4ad08292, condition unsigned greater or equals
High level: (esi_2 >=u m[ebp_2 + 12]) or (eax_1 ~= 0)

0
*v* local22 := eax_1

0
*v* local23 := esp_1

0
*v* local24 := ebp_2

0
*v* local25 := esi_2

0
*v* local26 := local9

0
*v* local27 := local12

0
*v* local28 := local3

Twoway BB: in edges: 4ad0827f out edges: 4ad0828d 4ad0828b
4ad08285
16
*32* ecx := m[esi_2]
4ad08287


4ad08289
19
BRANCH 0x4ad0828d, condition equals
High level: ecx = 0

Computed call BB: in edges: 4ad08289 out edges: 4ad0828d
4ad0828b
21
*u32* m[esp_1 - 4] := %pc

23
{*union* eax_4, *union* esi_6, *32** esp_4, *j32* ebp, *32* edi} := CALL ecx(<all>)
Reaching definitions: r24=eax_1, ecx=ecx, esp=esp_1 - 4, ebp=ebp_2, esi=esi_2, edi=edi, local0=local3, local6=argv, local7=envp, local1=local9, local2=local12, tmp1=ecx, %flags=LOGICALFLAGS32( ecx ), %ZF=LOGICALFLAGS32( ecx ), %CF=LOGICALFLAGS32( ecx )
Live variables: eax_4, ebp, edi, esi_6, esp_4, local11, local14, local8

0
*v* local22 := eax_4

0
*v* local23 := esp_4

0
*v* local24 := ebp

0
*v* local25 := esi_6

0
*v* local26 := local11

0
*v* local27 := local14

0
*v* local28 := local8

L2: Oneway BB: in edges: 4ad08289 4ad0828b out edges: 4ad0827c
00000000
45
*union* eax_2 := local22

47
*32** esp_2 := local23

48
*union* ebp_3 := local24

49
*union* esi_5 := local25

61
*32* local10 := local26

62
*32* local13 := local27

64
*union* local4 := local28
4ad0828d
25
*union* esi_3 := esi_5 + 4
4ad08290
27
GOTO 0x4ad0827c

0
*v* local15 := eax_2

0
*v* local16 := esp_2

0
*v* local17 := ebp_3

0
*v* local18 := esi_3

0
*v* local19 := local10

0
*v* local20 := local13

0
*v* local21 := local4

L1: Ret BB: in edges: 4ad0827f out edges:
00000000


4ad08292


4ad08293


4ad08294
34
RET *union* eax_5 := eax_1
Modifieds: *32* r24, *32* esi, *32* ecx, *v* esp, *32* ebp, *v* edi
Reaching definitions: r24=eax_1, ecx=ecx, esp=esp_1 + 12, ebp=ebp, esi=esi, edi=edi, local0=local3, local1=local9, local2=local12, tmp1=tmp1, %flags=%flags, %ZF=%ZF, %CF=%CF



Par contre je n'y comprend rien du tout Mort de Rire




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message Cmd en compilateur 
IK-DC a écrit:
Je crois que j'ai réussi à décompiler cmd.exe (sous windows 7) et je crois que c'est du c :

Wink Mr. Green Razz Laughing

{{{Code source de Cmd.exe sous windows 7 64 bits}}}
{{{Le code source traduit en langage humain je crois ...}}}

Par contre je n'y comprend rien du tout Mort de Rire

Je crois plutôt que c'est du C avec plein d’erreurs et des variables illisibles avec un nom d'assembleur (eax...).




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message Cmd en compilateur 
En gros tu veut un compilatéur AOT (ahead-of-time) pour batch, il doit y àvoir moyen avec un cmd open-source comme Dos9 ou OpenBatch.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message Cmd en compilateur 
TSnake41 a écrit:
En gros tu veut un compilatéur AOT (ahead-of-time) pour batch, il doit y àvoir moyen avec un cmd open-source comme Dos9 ou OpenBatch.


Oui c'est ça !


TSnake41 a écrit:
IK-DC a écrit:
Je crois que j'ai réussi à décompiler cmd.exe (sous windows 7) et je crois que c'est du c :

Wink Mr. Green Razz Laughing

{{{Code source de Cmd.exe sous windows 7 64 bits}}}
{{{Le code source traduit en langage humain je crois ...}}}

Par contre je n'y comprend rien du tout Mort de Rire

Je crois plutôt que c'est du C avec plein d’erreurs et des variables illisibles avec un nom d'assembleur (eax...).


J'ai bien dit que c'était du C, mais les erreurs je sais pas Neutral ...




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message Cmd en compilateur 
Donc c'est possible ou pas????



Répondre en citant
Message Cmd en compilateur 
Salut !

IK-DC a écrit:
TSnake41 a écrit:
En gros tu veut un compilatéur AOT (ahead-of-time) pour batch, il doit y àvoir moyen avec un cmd open-source comme Dos9 ou OpenBatch.


Oui c'est ça !

Désolé, mais j'y crois pas trop. En fait, le truc c'est que le batch se prête vraiment bien à être interprété, mais pour être compilé, c'est beaucoup plus compliqué.
En effet, y'a pas mal de cas où un peut pas prévoir à l'avance ce qui va se passer (je donne un exemple tout bête) :

Code:
set /p cmd=Une commande ?
%cmd% lol


Finalement, je pense que c'est possible d'optimiser un batch afin d'interpréter le minimum de code possible à l’exécution, mais à mon avis c'est très coton ...
On y avait pensé y'a un bout de temps avec carlos, et on pensait réutiliser du code de Dos9, mais on a vite abandonné

TSnake41 a écrit:
IK-DC a écrit:
Je crois que j'ai réussi à décompiler cmd.exe (sous windows 7) et je crois que c'est du c :

Wink Mr. Green Razz Laughing

{{{Code source de Cmd.exe sous windows 7 64 bits}}}
{{{Le code source traduit en langage humain je crois ...}}}

Par contre je n'y comprend rien du tout Mort de Rire

Je crois plutôt que c'est du C avec plein d’erreurs et des variables illisibles avec un nom d'assembleur (eax...).


J'ai bien dit que c'était du C, mais les erreurs je sais pas Neutral ...[/quote]
Ca a l'air d'être du C bien dégeu, et comme le décompilateur a perdu tous les noms, ils met des noms bizarre. Maintenant, je doute que tu aies tout le code,
Ou sinon cmd.exe marche comme par magie Mr. Green




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message Cmd en compilateur 
Darkbatcher a écrit:
Salut !

IK-DC a écrit:
TSnake41 a écrit:
En gros tu veut un compilatéur AOT (ahead-of-time) pour batch, il doit y àvoir moyen avec un cmd open-source comme Dos9 ou OpenBatch.


Oui c'est ça !

Désolé, mais j'y crois pas trop. En fait, le truc c'est que le batch se prête vraiment bien à être interprété, mais pour être compilé, c'est beaucoup plus compliqué.
En effet, y'a pas mal de cas où un peut pas prévoir à l'avance ce qui va se passer (je donne un exemple tout bête) :

Code:
set /p cmd=Une commande ?
%cmd% lol


Finalement, je pense que c'est possible d'optimiser un batch afin d'interpréter le minimum de code possible à l’exécution, mais à mon avis c'est très coton ...
On y avait pensé y'a un bout de temps avec carlos, et on pensait réutiliser du code de Dos9, mais on a vite abandonné


Je dit pas que je pourrais faire un compilateur de batch, mais d'un point de vue théorique :
- Je ne voit pas ou est le problème avec le batch pour le compiler, tu dit que, pour l'exemple, le set /p serait un problème pour compiler le batch, or dans tout les autres langages de programmations (compilé ou non),
il y a des équivalences du set /p et ça n'as jamais géné la compilation Neutral (Après pour %cmd%, je ne voit pas non plus le problème : ici l'ordinateur irais chercher dans la RAM la variable %cmd% et l'appliquerais en tant que commande, et si cette commande est incorrecte, elle affiche un erreur, quand le batch n'est pas compilé, ou, j'imagine, si il est compilé, fait crash le programme, il suffirais avant de mettre des if pour vérifier que la variable est bel et bien une commande ...)
- Pour compiler du batch, il suffirait de savoir tout ce que cmd fait lors de l’exécution d'un programme batch : par exemple, quel est le code que donne cmd.exe à l'OS pour la commande echo, et créé un compilateur basé sur ce principe pour toutes les commandes batch (interne ou externe). Le compilateur du coup lira les infos d'un fichier batch à compiler par exemple, et remplace du coup le code comme ceci :

Code:

:: Fichier originel batch
echo TEST


Procédures du compilateur :
- Vérifie les erreurs de syntaxe
- Découpe le code en commande - arguments de la commande (ici "echo" est la commande et "TEST" est l'argument)
- Remplace les commandes par les codes binaires (codes que donnent cmd à l'OS) et si besoin est transforme les arguments en binaire
- Créé un fichier .exe

Ce qui donnerais un truc du genre :
Code:

::Fichier compilé batch
codeDeCmdAL'osPourLaCommandeECHO Arguments



Voilà fin de la partie théorique Mr. Green

Donc si quelqu'un (sans viser DarkBatcher Wink Mr. Green ) se (re)lançais dans la création d'un compilateur pour batch, je participe sans aucun doute !


Darkbatcher a écrit:

Ca a l'air d'être du C bien dégeu, et comme le décompilateur a perdu tous les noms, ils met des noms bizarre. Maintenant, je doute que tu aies tout le code,
Ou sinon cmd.exe marche comme par magie Mr. Green


J'ai utilisé un décompilateur en version Alpha mais c'est le seul qui à fonctionné ^^
Sinon j'aime bien la magie Mort de Rire

@ ++ Okay Wink




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message Cmd en compilateur 
je pense avoir une idée en sachant que le C# possède les goto et les labels (https://msdn.microsoft.com/fr-fr/library/13940fs2.aspx).
Mon seul soucis sera FOR (il faudra parser le code pour être convertit en C#).

Une autre chose, pas de code dynamique (pas de %commande% seul)




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message Cmd en compilateur 
TSnake41 a écrit:
je pense avoir une idée en sachant que le C# possède les goto et les labels (https://msdn.microsoft.com/fr-fr/library/13940fs2.aspx).
Mon seul soucis sera FOR (il faudra parser le code pour être convertit en C#).

Une autre chose, pas de code dynamique (pas de %commande% seul)


Je vois pas le problème du %commande% seul, le compilateur peut comprendre qu'il s'agit d'une commande choisis par l'utilisateur :

Le code dans le batch :
Code:

set /p cmd=Une commande ?
%cmd% lol


Le code binaire une fois le batch compilé :
Code:

- Demander à l'utilisateur de remplir la variable cmd
- Prendre la valeur de la variable cmd en mémoire et remplacer la commande %cmd% par la sa valeur
- Retourne un code d'erreur si la valeur de %cmd% ne correspond à aucune commande, ni à aucun programme, sinon, éxecuter la valeur de %cmd%





______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message Cmd en compilateur 
Ce que je capte pas dans votre idée :

Un :

echo Vous êtes un peu OUF !

Ou un :

set /p "$OUF=Ton nom ? :"

S'afficherait où ??????

Il ouvrira un CMD c'est ça ????

Dans le genre inutil on est au sommet !

"Compiler un code pour éviter le CMD mais qui ouvre un CMD pour s'executer"

Je capte pas vraiment ce que vous voulez faire.


Shocked




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message Cmd en compilateur 
sachadee a écrit:
Ce que je capte pas dans votre idée :

Un :

echo Vous êtes un peu OUF !

Ou un :

set /p "$OUF=Ton nom ? :"

S'afficherait où ??????

Il ouvrira un CMD c'est ça ????

Dans le genre inutil on est au sommet !

"Compiler un code pour éviter le CMD mais qui ouvre un CMD pour s'executer"

Je capte pas vraiment ce que vous voulez faire.


Shocked


Attention, il ne faut pas confondre cmd (ou command pour les DOSiens) avec une application console.
TXCobalt.Server s’exécute bien dans une console mais n'a rien a voir (dans le sens de n'utilise pas) avec cmd, OpenBatch également.

https://fr.wikipedia.org/wiki/Cmd
https://en.wikipedia.org/wiki/Console_application




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message Cmd en compilateur 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch