Составители:
Рубрика:
Приложение Б.
Исходный код программы 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
- …
- следующая ›
- последняя »
