Составители:
Рубрика:
ilasm sample1.il
Мы получим следующее сообщение от компилятора ILASM:
Microsoft (R) .NET Framework IL Assembler. Version 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
Assembling 'sample1.il', no listing file, to EXE --> 'sample1.EXE'
Source file is ANSI
Assembled method Point::.ctor
Assembled method Point::Distance
Assembled method SampleClass::Demo
Creating PE file
Emitting members:
Global
Class 1 Fields: 2; Methods: 2;
Class 2 Methods: 1;
Resolving member refs: 9 -> 9 defs, 0 refs
Writing PE file
Operation completed successfully
Итак, наша программа успешно откомпилировалась и на диске поя-
вилась сборка sample1.exe. Попробуем провести ее верификацию:
peverify sample1.exe
В ответ верификатор выведет на экран:
Microsoft (R) .NET Framework PE Verifier Version 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
All Classes and Methods in sample1.exe Verified
Таким образом, сборка успешно прошла верификацию и мы можем
рискнуть ее запустить:
sample1.exe
В результате на экран выводится расстояние между точками
(0.0,0.0) и (1.0,1.0):
1,4142135623731
Common Intermediate Language
131
ldarga b
ldfld float64 Point::x
sub
dup
mul
ldarga a
ldfld float64 Point::y
ldarga b
ldfld float64 Point::y
sub
dup
mul
add
call float64 [mscorlib]System.Math::Sqrt(float64)
ret
}
}
А теперь объявим вспомогательный класс SampleClass, который будет
содержать точку входа в нашу сборку. Метод Demo (точка входа) будет вы-
числять расстояние между точками (0.0,0.0) и (1.0,1.0) и выводить ре-
зультат на экран:
.class public SampleClass
{
.method public static void Demo()
{
.entrypoint
.maxstack 3
ldc.r8 0.0
ldc.r8 0.0
newobj void Point::.ctor(float64,float64)
ldc.r8 1.0
ldc.r8 1.0
newobj void Point::.ctor(float64,float64)
call float64 Point::Distance(valuetype Point, valuetype Point)
call void [mscorlib]System.Console::WriteLine (float64)
ret
}
}
Откомпилируем нашу программу, которая записана в текстовом фай-
ле sample1.il. Подразумевается, что мы работаем в Windows и у нас пере-
менная окружения path настроена таким образом, что программы ILASM и
PEVERIFY можно вызывать без указания путей. Наберем в консоли команду:
130
CIL и системное программирование в Microsoft .NET
130 CIL и системное программирование в Microsoft .NET Common Intermediate Language 131
ldarga b ilasm sample1.il
ldfld float64 Point::x
sub Мы получим следующее сообщение от компилятора ILASM:
dup
mul Microsoft (R) .NET Framework IL Assembler. Version 1.1.4322.573
ldarga a Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
ldfld float64 Point::y Assembling 'sample1.il', no listing file, to EXE --> 'sample1.EXE'
ldarga b Source file is ANSI
ldfld float64 Point::y
sub Assembled method Point::.ctor
dup Assembled method Point::Distance
mul Assembled method SampleClass::Demo
add Creating PE file
call float64 [mscorlib]System.Math::Sqrt(float64) Emitting members:
ret Global
} Class 1 Fields: 2; Methods: 2;
} Class 2 Methods: 1;
А теперь объявим вспомогательный класс SampleClass, который будет Resolving member refs: 9 -> 9 defs, 0 refs
содержать точку входа в нашу сборку. Метод Demo (точка входа) будет вы- Writing PE file
числять расстояние между точками (0.0,0.0) и (1.0,1.0) и выводить ре- Operation completed successfully
зультат на экран:
.class public SampleClass Итак, наша программа успешно откомпилировалась и на диске поя-
{ вилась сборка sample1.exe. Попробуем провести ее верификацию:
.method public static void Demo()
{ peverify sample1.exe
.entrypoint
.maxstack 3 В ответ верификатор выведет на экран:
ldc.r8 0.0
ldc.r8 0.0 Microsoft (R) .NET Framework PE Verifier Version 1.1.4322.573
newobj void Point::.ctor(float64,float64) Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
ldc.r8 1.0
ldc.r8 1.0 All Classes and Methods in sample1.exe Verified
newobj void Point::.ctor(float64,float64)
call float64 Point::Distance(valuetype Point, valuetype Point) Таким образом, сборка успешно прошла верификацию и мы можем
call void [mscorlib]System.Console::WriteLine (float64) рискнуть ее запустить:
ret
} sample1.exe
}
Откомпилируем нашу программу, которая записана в текстовом фай- В результате на экран выводится расстояние между точками
ле sample1.il. Подразумевается, что мы работаем в Windows и у нас пере- (0.0,0.0) и (1.0,1.0):
менная окружения path настроена таким образом, что программы ILASM и
PEVERIFY можно вызывать без указания путей. Наберем в консоли команду: 1,4142135623731
Страницы
- « первая
- ‹ предыдущая
- …
- 70
- 71
- 72
- 73
- 74
- …
- следующая ›
- последняя »
