2011-09-24 5 views
0

나는 C#으로 컴파일 된 실행 파일을 가지고 있으며 어셈블러 코드에 코드를 덤프하고 싶습니다. 그렇게 할 수있는 도구가 있습니까? 또한 생성 된 어셈블러에서 실행 파일을 생성 할 수 있습니까?실행 파일에서 덤프 어셈블러를 만드는 방법

+1

ildasm.exe를 사용하여 생성 된 IL을 확인하십시오. 그리고 예, ilasm.exe는 .exe –

답변

2

C#은 어셈블러 수준까지 컴파일되지 않지만 동일한 중간 언어 (CIL)로 컴파일됩니다. 컴파일 된 C#은 통역사가 필요하며 항상 필요합니다. 컴파일 된 양식을 비 .NET 프로그램으로 복사 할 수는 없습니다.

+0

을 "재 컴파일 할 수 있습니다. 컴파일 된 C#은 통역사가 필요합니다"- 기술적으로, 아니오. CIL은 VM을 필요로합니다 (심지어 보편적 인 법칙도 아니며 JVM 바이트 코드를 실행하는 틈새 CPU가 있고 CIL에 대해서도 가능해야합니다). C#을 CIL (예 : 원시 코드) 이외의 다른 것으로 컴파일하는 것이 가능합니다. 일부 런타임 (예 : GC의 경우, 이는 실행 파일에 정적으로 링크 될 수 있음)이 여전히 필요할 수 있습니다. 이것은 막대한 프로젝트 일 뿐이며 CIL을 사용하고 기존 구현과 JIT 컴파일러 (또는 AOT 컴파일이 필요한 경우 ngen)를 사용하는 것에 비해 거의 제로에 가깝습니다. – delnan

+0

시작 시간이 가장 중요한 기본 이점입니다. Afaik NGEN은이 문제를 해결하기 위해 개발되었습니다. –

1

C#이 컴퓨터 코드로 컴파일되지 않거나 적어도 Microsoft C# 컴파일러가 컴퓨터 코드로 컴파일되지 않습니다. 그러나 ildasm을 사용하여 어셈블리와 같은 인쇄물에서 중간 언어 바이트 코드를 가져올 수 있습니다.

또한 CLR에서 J # 코드를 Just-In-Time 컴파일 할 수있는 방법을보고 싶다면 Mono를 사용하여 어셈블리 언어로 컴파일하십시오. 예는 website에 주어진 :

mono --aot program.exe 

그런 다음 당신은 적어도 Cygwin에서 또는는 MinGW와 * nix에서 스크립트/맥 컴퓨터, 또는 Windows 시스템에서,이에서 어셈블리 언어를 얻을 수 -d objdump를 할 수 있습니다.

관련 문제