2012-02-12 6 views
4

C# 코드에서 어셈블리 코드를 생성 할 수있는 방법이 있습니까? C 코드로 GAS를 사용할 수 있다는 것을 알고 있지만 C#으로 가능한지 아무도 모른다.C# 코드에서 어셈블리 코드 생성 중?

+0

나는 당신이 무엇을 요구하고 있는지 분명하지 않습니다. C#을 어셈블리로 컴파일 하시겠습니까? 아니면 어셈블리를 출력하는 C# 프로그램을 작성 하시겠습니까? – perelman

+0

어셈블리에서 C# 코드가 어떻게 보이는지보고 싶습니다. 교육 목적으로. 지금 어셈블리 수업을 듣고 있습니다. – dsta

답변

2

C#은 일반적으로 프로그램이 실제로 실행될 때 네이티브 코드로 컴파일 된 .NET 바이트 코드 (CIL or MSIL)로 컴파일 된 다음 JIT ("Just In Time")으로 컴파일됩니다. C# 용 컴파일러는 미리 Mono's AOT과 같이 존재하므로, 그 중 하나를 통해 C# 프로그램을 컴파일 한 다음 해체 할 수 있습니다. 그 결과는 따르기가 매우 어려울 수 있습니다.

더 많은 경우에 컴파일 된 .exe의 C# 프로그램에서 ILdasm을 사용하여 수행 할 수있는 CPU 어셈블리 코드보다 다소 높은 바이트 코드를 확인하는 것이 좋습니다.

2

C# 코드는 C 컴파일러에서 실제로 asm 코드가 아닌 MSIL (MS Intermediate Language)로 컴파일됩니다. .NET Framework 응용 프로그램 실행 방법에 대해 자세히 알아보십시오.

발생 된 일리노이 코드를 보려면 this question을 참조하십시오.

2

NGEN 도구를 사용하여 간접적 인 방법으로이 작업을 수행 한 다음 생성 된 이진 파일을 분해 할 수 있습니다. 또는 디버거를 사용하여 MSIL에서 생성 된 JIT 코드를 검사 할 수 있습니다. Ollydbg 2은 이러한 작업을 수행 할 수있는 디버거 중 하나입니다.