Шаг 8 - Net ассемблер и дизассемблер

Есть две утилиты, которые заменяют ассемблер и дизассемблер. Первая утилита имеет имя ILasm.exe, она формирует EXE файл на основе языка MSIL. И есть вторая утилита с именем ildasm.exe, которая переводит из EXE в язык MSIL. Ну давайте посмотрим, как этот ассемблер выглядит. Итак, давайте напишем BAT файл, который проведет дизассемблирование нашего примера из 1 шага.

Ildasm.exe 1.exe /output:1.il

Запустим его и посмотрим, что там внутри:

//  Microsoft (R) .NET Framework IL Disassembler.  Version 1.0.2914.16
//  Copyright (C) Microsoft Corp. 1998-2001. All rights reserved.
// VTableFixup Directory:
// No data.
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )     // .z\V.4..
  .ver 1:0:2411:0
}
.assembly '1'
{
  // --- The following custom attribute is added automatically, do not uncomment -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool,
  //  bool) = ( 01 00 00 01 00 00 ) 
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module '1.exe'
// MVID: {7FC658C1-CFED-4A2F-AE42-8AA970A29D5D}
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
// Image base: 0x03000000
.class private auto ansi beforefieldinit MainApp
       extends [mscorlib]System.Object
{
  .method public hidebysig static void  Main() cil managed
  {
    .entrypoint
    // Code size       11 (0xb)
    .maxstack  8
    IL_0000:  ldstr      "Hello World using C#!"
    IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000a:  ret
  } // end of method MainApp::Main

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // Code size       7 (0x7)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method MainApp::.ctor

} // end of class MainApp

//*********** DISASSEMBLY COMPLETE ***********************
// WARNING: Created Win32 resource file 1.res

Нда, новый ассемблер. Ну и обратную операцию. Нужно собрать из il обычный EXE. Пишем bat файл. Все получается.

gif/8_1.gif (5252 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 26.09.2001