Составители:
Рубрика:
Приложение Б.
Исходный код программы CilCodec
Исходный код программы CilCodec, выполняющей кодирование/де-
кодирование потока инструкций языка CIL, располагается в файле
CilCodec.cs:
using System;
using System.Collections;
using System.Reflection;
using System.Reflection.Emit;
public class Instruction
{
public Instruction(OpCode code, int offset)
{
this.code = code;
this.offset = offset;
this.operand = null;
}
public OpCode Code { get { return code; } }
public int Offset { get { return offset; } }
public object Operand
{
get { return operand; }
set { operand = value; }
}
public override string ToString()
{
return String.Format(“ IL_{0:X8}: “,Offset) +
Code.ToString().PadRight(10) + “ “ + formatOperand();
}
#region Private members
private OpCode code;
Исходный код программы CilCodec
291
0x00, 0x00, 0x00, 0x00
};
// CIL CODE
extern unsigned char cilcode[] = {
0x56, 0x72, 0x01, 0x00, 0x00, 0x70, 0x28, 0x02,
0x00, 0x00, 0x0A, 0x28, 0x01, 0x00, 0x00, 0x0A,
0x28, 0x02, 0x00, 0x00, 0x0A, 0x2A
};
int main()
{
FILE *f;
struct INPUT_PARAMETERS params;
params.FileAlignment = 0x1000;
params.SizeOfMetadata = sizeof(metadata);
params.SizeOfCilCode = sizeof(cilcode);
params.ImageBase = 0x400000;
params.EntryPointToken = 0x06000001;
params.Type = EXE_TYPE;
params.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI;
params.metadata = metadata;
params.cilcode = cilcode;
if(params.Type == EXE_TYPE){
printf(“File: hello.exe generated\n”);
f = fopen(“hello.exe”,”wb”);
}
else{
printf(“File: hello.dll generated\n”);
f = fopen(“hello.dll”,”wb”);
}
make_file(f, ¶ms);
fclose(f);
return 0;
}
290
CIL и системное программирование в Microsoft .NET
290 CIL и системное программирование в Microsoft .NET Исходный код программы CilCodec 291 0x00, 0x00, 0x00, 0x00 }; Приложение Б. // CIL CODE Исходный код программы CilCodec extern unsigned char cilcode[] = { 0x56, 0x72, 0x01, 0x00, 0x00, 0x70, 0x28, 0x02, Исходный код программы CilCodec, выполняющей кодирование/де- 0x00, 0x00, 0x0A, 0x28, 0x01, 0x00, 0x00, 0x0A, кодирование потока инструкций языка CIL, располагается в файле 0x28, 0x02, 0x00, 0x00, 0x0A, 0x2A CilCodec.cs: }; using System; int main() using System.Collections; { using System.Reflection; FILE *f; using System.Reflection.Emit; struct INPUT_PARAMETERS params; public class Instruction { params.FileAlignment = 0x1000; public Instruction(OpCode code, int offset) params.SizeOfMetadata = sizeof(metadata); { params.SizeOfCilCode = sizeof(cilcode); this.code = code; params.ImageBase = 0x400000; this.offset = offset; params.EntryPointToken = 0x06000001; this.operand = null; params.Type = EXE_TYPE; } params.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI; params.metadata = metadata; public OpCode Code { get { return code; } } params.cilcode = cilcode; public int Offset { get { return offset; } } if(params.Type == EXE_TYPE){ printf(“File: hello.exe generated\n”); public object Operand f = fopen(“hello.exe”,”wb”); { } get { return operand; } else{ set { operand = value; } printf(“File: hello.dll generated\n”); } f = fopen(“hello.dll”,”wb”); } public override string ToString() { make_file(f, ¶ms); return String.Format(“ IL_{0:X8}: “,Offset) + Code.ToString().PadRight(10) + “ “ + formatOperand(); fclose(f); } return 0; } #region Private members private OpCode code;
Страницы
- « первая
- ‹ предыдущая
- …
- 150
- 151
- 152
- 153
- 154
- …
- следующая ›
- последняя »