IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

compilation IL via ILASM etILDASM


Sujet :

Framework .NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Par défaut compilation IL via ILASM etILDASM
    Bonjour à tous,

    Je suis occupé à faire certains tests sur la signature d'assembly. Pour cela, j'aimerai modifier une assembly signée pour vérifier que l'assembly sera bien refusée à l'éxécution du programme. Pour modifier une assembly, je dois récupérer le code IL que je récupère à l'aide de ILDASM pour ensuite la modifier et la compiler avec l'outil ILASM. Le soucis est que ILASM me donne une erreur et refuse de compiler l'assembly. L'erreur est la suivante :
    error : syntax error at token '.' in: .stackreserve 0x0010000
    Si je retire cette erreur du code IL, j'aurai une autre erreur :

    error : syntax error at token 'ConsoleApplication1.Program' in:
    .class /*02000002*/ private auto ansi beforefieldinit ConsoleApplication1.Program
    Bref, je ne comprend pas pourquoi il ne veut pas compiler le code IL.

    L'assembly signée est une simple application console qui affiche un message "Hello World". Le code IL est le suivant :

    Et le code de l'application est :

    using System;

    namespace TestSignature
    {
    class Program
    {
    static void Main(string[] args)
    {
    Console.WriteLine("Hello World");
    Console.Read();
    }
    }
    }
    Je vous remercie d'avance pour votre aide


    ps: j'ai suivi la méthode de l'article suivant :
    http://webman.developpez.com/article...semblysigning/

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    tu as oublié de poster l'IL, je pense. Pourrais tu le poster ? =)

    Chez moi, le .stackreserve ne pose pas de probleme, et je n'arrive pas à reproduire le probleme.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Par défaut
    Oui sorry, voici le code IL. Merci de me l'avoir rappelé

    // Metadata version: v2.0.50727
    .assembly extern /*23000001*/ mscorlib
    {
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
    .ver 2:0:0:0
    }
    .assembly /*20000001*/ TestSignature
    {
    .custom /*0C000001:0A000001*/ instance void [mscorlib/*23000001*/]System.Reflection.AssemblyFileVersionAttribute/*01000002*/::.ctor(string) /* 0A000001 */ = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 ) // ...1.0.0.0..
    .custom /*0C000002:0A000003*/ instance void [mscorlib/*23000001*/]System.Runtime.InteropServices.GuidAttribute/*01000004*/::.ctor(string) /* 0A000003 */ = ( 01 00 24 31 64 38 33 35 31 36 38 2D 64 35 38 62 // ..$1d835168-d58b
    2D 34 33 35 66 2D 61 66 32 38 2D 35 39 31 62 62 // -435f-af28-591bb
    34 39 64 36 66 61 61 00 00 ) // 49d6faa..
    .custom /*0C000003:0A000004*/ instance void [mscorlib/*23000001*/]System.Runtime.InteropServices.ComVisibleAttribute/*01000005*/::.ctor(bool) /* 0A000004 */ = ( 01 00 00 00 00 )
    .custom /*0C000004:0A000006*/ instance void [mscorlib/*23000001*/]System.Reflection.AssemblyTrademarkAttribute/*01000007*/::.ctor(string) /* 0A000006 */ = ( 01 00 00 00 00 )
    .custom /*0C000005:0A000007*/ instance void [mscorlib/*23000001*/]System.Reflection.AssemblyCopyrightAttribute/*01000008*/::.ctor(string) /* 0A000007 */ = ( 01 00 19 43 6F 70 79 72 69 67 68 74 20 C2 A9 20 // ...Copyright ..
    61 63 76 2D 63 73 63 20 32 30 30 38 00 00 ) // acv-csc 2008..
    .custom /*0C000006:0A000008*/ instance void [mscorlib/*23000001*/]System.Reflection.AssemblyProductAttribute/*01000009*/::.ctor(string) /* 0A000008 */ = ( 01 00 0D 54 65 73 74 53 69 67 6E 61 74 75 72 65 // ...TestSignature
    00 00 )
    .custom /*0C000007:0A000009*/ instance void [mscorlib/*23000001*/]System.Reflection.AssemblyCompanyAttribute/*0100000A*/::.ctor(string) /* 0A000009 */ = ( 01 00 07 61 63 76 2D 63 73 63 00 00 ) // ...acv-csc..
    .custom /*0C000008:0A00000A*/ instance void [mscorlib/*23000001*/]System.Reflection.AssemblyConfigurationAttribute/*0100000B*/::.ctor(string) /* 0A00000A */ = ( 01 00 00 00 00 )
    .custom /*0C000009:0A00000B*/ instance void [mscorlib/*23000001*/]System.Reflection.AssemblyDescriptionAttribute/*0100000C*/::.ctor(string) /* 0A00000B */ = ( 01 00 00 00 00 )
    .custom /*0C00000A:0A00000C*/ instance void [mscorlib/*23000001*/]System.Reflection.AssemblyTitleAttribute/*0100000D*/::.ctor(string) /* 0A00000C */ = ( 01 00 0D 54 65 73 74 53 69 67 6E 61 74 75 72 65 // ...TestSignature
    00 00 )

    // --- The following custom attribute is added automatically, do not uncomment -------
    // .custom /*0C00000B:0A00000D*/ instance void [mscorlib/*23000001*/]System.Diagnostics.DebuggableAttribute/*0100000E*/::.ctor(valuetype [mscorlib/*23000001*/]System.Diagnostics.DebuggableAttribute/*0100000E*//DebuggingModes/*0100000F*/) /* 0A00000D */ = ( 01 00 07 01 00 00 00 00 )

    .custom /*0C00000C:0A00000E*/ instance void [mscorlib/*23000001*/]System.Runtime.CompilerServices.CompilationRelaxationsAttribute/*01000010*/::.ctor(int32) /* 0A00000E */ = ( 01 00 08 00 00 00 00 00 )
    .custom /*0C00000D:0A00000F*/ instance void [mscorlib/*23000001*/]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute/*01000011*/::.ctor() /* 0A00000F */ = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
    63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
    .publickey = (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00 // .$..............
    00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 // .$..RSA1........
    E1 40 CD F1 E9 67 76 80 E7 ED 70 85 54 0D 0E DF // .@...gv...p.T...
    14 7F AC 62 E7 F8 EF 43 7D 19 3C 75 E6 51 D5 53 // ...b...C}.<u.Q.S
    27 73 BB C4 1F 5A F5 69 F5 93 77 7B 52 91 E4 A7 // 's...Z.i..w{R...
    C5 95 4A E7 3E 1C 6E B3 91 CF 90 65 F0 E3 BF CF // ..J.>.n....e....
    4A 68 17 13 62 37 A1 DC 9E 92 0D 6E 2E 1B 8D A6 // Jh..b7.....n....
    C8 06 77 FC 7A 7F 73 EB 81 A5 03 F7 5F 8E 4E EF // ..w.z.s....._.N.
    8A E9 A9 85 A7 7F 8E 07 43 CB A3 83 8C 17 B9 AE // ........C.......
    F6 EE EE 23 B8 76 75 AC FC 90 4B 31 AF 61 93 B2 ) // ...#.vu...K1.a..
    .hash algorithm 0x00008004
    .ver 1:0:0:0
    }
    .module TestSignature.exe
    // MVID: {D0A24CE8-D31E-4421-9088-0D3BFA259B0F}
    .imagebase 0x00400000
    .file alignment 0x00001000
    .stackreserve 0x00100000
    .subsystem 0x0003 // WINDOWS_CUI
    .corflags 0x00000009 // ILONLY
    // Image base: 0x01190000


    // =============== CLASS MEMBERS DECLARATION ===================

    .class /*02000002*/ private auto ansi beforefieldinit TestSignature.Program
    extends [mscorlib/*23000001*/]System.Object/*01000001*/

    {
    .method /*06000001*/ private hidebysig static
    void Main(string[] args) cil managed
    // SIG: 00 01 01 1D 0E
    {
    .entrypoint
    // Method begins at RVA 0x20d0
    // Code size 19 (0x13)
    .maxstack 8
    .language '{3F5162F8-07C6-11D3-9053-00C04FA302A1}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
    // Source File 'C:\Documents and Settings\t99msc\Desktop\Signature\TestSignature\TestSignature\Program.cs'
    .line 8,8 : 9,10 'C:\\Documents and Settings\\t99msc\\Desktop\\Signature\\TestSignature\\TestSignature\\Program.cs'
    //000008: {
    IL_0000: /* 00 | */ nop
    .line 9,9 : 13,64 ''
    //000009: Console.WriteLine("Ceci test une assemlie signe");
    IL_0001: /* 72 | (70)000001 */ ldstr bytearray (43 00 65 00 63 00 69 00 20 00 74 00 65 00 73 00 // C.e.c.i. .t.e.s.
    74 00 20 00 75 00 6E 00 65 00 20 00 61 00 73 00 // t. .u.n.e. .a.s.
    73 00 65 00 6D 00 6C 00 69 00 65 00 20 00 73 00 // s.e.m.l.i.e. .s.
    69 00 67 00 6E 00 E9 00 65 00 ) // i.g.n...e. /* 70000001 */
    IL_0006: /* 28 | (0A)000010 */ call void [mscorlib/*23000001*/]System.Console/*01000012*/::WriteLine(string) /* 0A000010 */
    IL_000b: /* 00 | */ nop
    .line 10,10 : 13,28 ''
    //000010: Console.Read();
    IL_000c: /* 28 | (0A)000011 */ call int32 [mscorlib/*23000001*/]System.Console/*01000012*/::Read() /* 0A000011 */
    IL_0011: /* 26 | */ pop
    .line 11,11 : 9,10 ''
    //000011: }
    IL_0012: /* 2A | */ ret
    } // end of method Program::Main

    .method /*06000002*/ public hidebysig specialname rtspecialname
    instance void .ctor() cil managed
    // SIG: 20 00 01
    {
    // Method begins at RVA 0x20e4
    // Code size 7 (0x7)
    .maxstack 8
    IL_0000: /* 02 | */ ldarg.0
    IL_0001: /* 28 | (0A)000012 */ call instance void [mscorlib/*23000001*/]System.Object/*01000001*/::.ctor() /* 0A000012 */
    IL_0006: /* 2A | */ ret
    } // end of method Program::.ctor

    } // end of class TestSignature.Program


    // =============================================================

    // *********** DISASSEMBLY COMPLETE ***********************
    // WARNING: Created Win32 resource file C:\TestSignature.res

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    je n'ai aucune erreur de compil :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Microsoft (R) .NET Framework IL Assembler.  Version 2.0.50727.1433
    Copyright (c) Microsoft Corporation.  All rights reserved.
    Assembling 'Test.il'  to EXE --> 'Test.exe'
    Source file is ANSI
     
    Assembled method TestSignature.Program::Main
    Assembled method TestSignature.Program::.ctor
    Creating PE file
     
    Emitting classes:
    Class 1:        TestSignature.Program
     
    Emitting fields and methods:
    Global
    Class 1 Methods: 2;
     
    Emitting events and properties:
    Global
    Class 1
    Writing PE file
    Operation completed successfully
    Et l'assembly passe le PEVerify sans probleme.

    Par contre, au lancement, je me fais jeter pour un probleme de nom fort :

    Exception non gérée : System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly 'TestSignature, Version=1.0.0.0, Culture=neutral, PublicKeyToken=624ed18e1efc24f5' ou une de ses dépendance. Échec de la validation de nom fort. (Exception de HRESULT : 0x8013141A)
    Nom du fichier : 'TestSignature, Version=1.0.0.0, Culture=neutral, PublicKeyToken=624ed18e1efc24f5' ---> System.Security.SecurityException: Échec de la validation de nom fort. (Exception de HRESULT : 0x8013141A)
    La zone de l'assembly qui a échoué était : MyComputer
    Je pense que c'est ce que tu voulais savoir. =)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Par défaut
    De mon coté il ne veut pas compiler cette assembly :/.
    Je dois mal manipulé la commander ilasm alors...

    Voici exactement ce que je fais pour compiler :

    C:\>ilasm TestSignature /exe

    Microsoft (R) .NET Framework IL Assembler. Version 1.1.4322.2032
    Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
    Assembling 'TestSignature.IL' , no listing file, to DLL --> 'TestSignature.DLL'
    Source file is UTF-8

    TestSignature.IL(48) : error : syntax error at token '.' in: .stackreserve 0x001
    00000


    ***** FAILURE *****
    Est ce bien la même commande que tu utilises?

    Merci pour ton aide .


    ps: J'arrive à compiler l'IL que microsoft donne en exemple ici : http://msdn2.microsoft.com/fr-fr/lib...kx(VS.80).aspx mais en retirant la ligne stackreserve du code IL...

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    apparement tu compiles sur Ilasm 1.1 (cf. note du compileur), et dans ce cas, .stackreserve ne passe pas dans Ilasm (je viens de tester), mais pourtant CSC 1.1 emet bien une directive .stackreserve (confirmé par dump de l'assembly produit). Bref, enleve la de ton fichier il.

    De meme, apparement, apres avoir reglé le probleme du stackreserve, il reste une autre erreur (toujours en 1.1, l'erreur de token de ton premier post), qui peut etre resolue en retirant le namespace du type dans la declaration de classe (TestSignature.Program => Program) et en ajoutant un bloc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .namespace Truc
    {
        .class public auto ansi beforefieldinit Program extends [mscorlib]System.Object
        {
        //...
        }
    }
    Bref, si tu peux passe au framework 2.0, ca resoudra tes problemes. Si tu ne peux pas, tu peux quand meme les esquiver.

    Bon courage. =)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Par défaut
    ah oui c'est surement ça le probleme ... Mais ce qui est bizarre c'est que j'utilise le framework 2.0 et que dans le répertoire du framework 2.0 je ne trouve pas ilasm.exe, je trouve juste le fichier config : "ilasm.exe.config". Par contre j'ai trouvé ilasm dans le répertoire "v1.1.4322" et c'est celui que j'ai utilisé.

    Merci de m'avoir apporter ton aide SirJulio Maintenant je vais me renseigner à propos du ilasm 2.0 .

    Je laisse encore le sujet ouvert au cas où quelqu'un serait pourquoi je n'ai pas l'exe de ilasm 2.0.

Discussions similaires

  1. [PDCurses] Compilation statique via G++
    Par informatiman dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 11/04/2013, 16h10
  2. Compilation projet via un .bat
    Par vinch999 dans le forum C#
    Réponses: 12
    Dernier message: 05/02/2011, 13h18
  3. compilation Java via maven et eclipse
    Par BBruno dans le forum Maven
    Réponses: 13
    Dernier message: 06/04/2009, 14h12
  4. compiler directement via ld
    Par minirop dans le forum C
    Réponses: 14
    Dernier message: 09/04/2007, 21h02
  5. Compiler du code Java via Java
    Par sozie9372 dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2006, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo