.NET EXE를 읽을 수있는 C # 소스 코드로 어떻게 디 컴파일합니까?
몇 년 전에 클라이언트를 위해 C # 응용 프로그램을 작성했지만 더 이상 소스 코드가 없습니다. 내가 가진 것은 클라이언트 PC에 배포 한 EXE입니다. EXE에서 C # 소스 코드를 생성 할 수있는 방법이 있습니까?
리플렉터 와 추가 기능 FileDisassembler .
리플렉터는 소스 코드를 볼 수 있습니다. FileDisassembler를 사용하면 VS 솔루션으로 변환 할 수 있습니다.
Red Gate가 더 이상 .Net Reflector의 무료 버전이 없다고 말했을 때 ILSpy 와 Telerik의 JustDecompile을 사용하기 시작했습니다 . ILSpy가 JustDecompile (여전히 베타 버전 임)보다 더 정확하게 디 컴파일하는 것을 발견했습니다. Red Gate는 그들의 결정을 변경했지만 여전히 .Net Reflector의 무료 버전을 가지고 있지만 이제는 ILSpy를 좋아합니다.
ILSpy 웹 사이트 ( http://www.ilspy.net/ )에서 :
ILSpy 는 오픈 소스 .NET 어셈블리 브라우저 및 디 컴파일러입니다.
ILSpy 기능
- 어셈블리 브라우징
- IL 분해
- C #으로 디 컴파일
- 람다 및 '수율 반환'지원
- XML 문서를 보여줍니다
- 자원 절약
- 유형 / 방법 / 속성 검색 (하위 문자열)
- 하이퍼 링크 기반 유형 / 방법 / 속성 탐색
- 기본 / 파생 유형 탐색
- 탐색 기록
- BAML에서 XAML 디 컴파일러로
- C # 프로젝트로 어셈블리 저장
- 필드 / 방법의 사용법 찾기
- 플러그인 (MEF)을 통해 확장 가능
최신 정보:
2012 년 4 월 15 일, ILSpy 2.0이 출시되었습니다. 버전 1.0과 비교 한 새로운 기능 :
- 조립 목록
- 식 트리 디 컴파일 지원
- nullable에 대한 리프팅 연산자 지원
- Visual Basic으로 디 컴파일
- 공백으로 구분 된 여러 문자열 검색 (ILSpy.exe에서 "어셈블리 관리자"를 검색하면 AssemblyListManager가 있음)
- 지역 변수를 클릭하면 해당 변수의 다른 모든 항목이 강조 표시됩니다
- 디 컴파일 된 코드보기 내에서 Ctrl + F를 사용하여 검색 할 수 있습니다.
최신 정보:
- ILSpy 2.1은 비동기 / 대기 디 컴파일을 지원합니다
리플렉터는 더 이상 일반적으로 무료가 아니지만 오픈 소스 개발자에게 무료로 제공합니다 : http://reflectorblog.red-gate.com/2013/07/open-source/
그러나 DevExtras 및 JetBrains와 같은 일부 회사는 무료 대안을 만들었습니다.
Denis Bauer의 리플렉터와 파일 디스어셈블러 애드 인 실제로 Reflector 자체는 디스 어셈블 된 소스 만 표시하는 어셈블리에서 소스 프로젝트를 생성합니다.
추가 : 내가 가장 좋아하는 것은 JetBrains ' dotPeek 입니다.
Telerik JustDecompile 은 무료이며 .NET 어셈블리에서 프로젝트를 생성하는 기능이 있습니다.
아무도 Microsoft의 ildasm 을 언급하지 않은 것에 놀랐습니다 . ILSpy 나 Reflector만큼 예쁘지는 않지만 Visual Studio와 함께 제공되므로 많은 개발자들이 이미 가지고 있습니다.
실행하려면 (VS 2013을 가정하고 다른 버전과 비슷해야 함) :
- 시작> 모든 프로그램> Visual Studio 2013> Visual Studio 도구를 선택하십시오.
- VS2013의 개발자 명령 프롬프트를 두 번 클릭하십시오.
- 결과 명령 프롬프트에서 "ildasm"을 실행하십시오.
- 도구에서 파일> 열기를 선택하고 실행 파일 또는 DLL을여십시오.
이제 DLL 구조를 탐색 할 수 있습니다. 수업 일원을 두 번 클릭하면 IL을 볼 수 있습니다. 파일> 덤프를 사용하여 IL을 파일로 내 보냅니다.
당신은 반사판을 원합니다 .
'Programing' 카테고리의 다른 글
tensorflow에서 이름 범위와 변수 범위의 차이점은 무엇입니까? (0) | 2020.04.04 |
---|---|
Java에서 변수 인수가있는 메소드에 배열을 인수로 전달할 수 있습니까? (0) | 2020.04.04 |
C # Using 블록은 무엇이며 왜 사용해야합니까? (0) | 2020.04.04 |
문자열이 유니 코드인지 아스키인지 어떻게 확인합니까? (0) | 2020.04.04 |
Jenkins의 내보내기 / 가져 오기 작업 (0) | 2020.04.04 |