ILSpy를 사용한 .NET 어셈블리 역컴파일
이 스킬을 사용하여 컴파일된 어셈블리를 역컴파일함으로써 .NET 코드가 내부적으로 어떻게 동작하는지 이해할 수 있습니다.
필수 조건
- .NET SDK 설치
- 다음 중 하나를 통해 ILSpy 명령줄 도구 사용 가능:
dnx ilspycmd(SDK 또는 런타임에서 사용 가능한 경우)dotnet tool install --global ilspycmd
두 가지 형태 모두 아래에 표시되어 있습니다. 사용자 환경에서 작동하는 것을 사용하세요.
참고: ILSpyCmd 옵션은 버전에 따라 약간 다를 수 있습니다.
지원되는 플래그는 항상ilspycmd -h로 확인하세요.
빠른 시작
# 어셈블리를 stdout으로 역컴파일
ilspycmd MyLibrary.dll
# 또는
dnx ilspycmd MyLibrary.dll
# 출력 폴더로 역컴파일
ilspycmd -o output-folder MyLibrary.dll
일반적인 .NET 어셈블리 위치
NuGet 패키지
~/.nuget/packages/<package-name>/<version>/lib/<tfm>/
.NET 런타임 라이브러리
dotnet --list-runtimes
.NET SDK 참조 어셈블리
dotnet --list-sdks
참조 어셈블리에는 구현이 포함되어 있지 않습니다.
프로젝트 빌드 출력
./bin/Debug/net8.0/<AssemblyName>.dll
./bin/Release/net8.0/publish/<AssemblyName>.dll
핵심 워크플로
- 이해하려는 대상을 식별합니다.
- 어셈블리를 찾습니다.
- 타입을 나열합니다.
- 대상을 역컴파일합니다.
명령어
기본 역컴파일
ilspycmd MyLibrary.dll
ilspycmd -o ./decompiled MyLibrary.dll
ilspycmd -p -o ./project MyLibrary.dll
특정 대상 역컴파일
ilspycmd -t Namespace.ClassName MyLibrary.dll
ilspycmd -lv CSharp12_0 MyLibrary.dll
IL 코드 보기
ilspycmd -il MyLibrary.dll
최신 .NET 빌드 관련 참고 사항
- ReadyToRun 이미지는 가독성을 저하시킬 수 있습니다.
- 트리밍 또는 AOT 빌드는 코드를 생략할 수 있습니다.
- 트리밍되지 않은 빌드를 선호하세요.
법적 고지
어셈블리 역컴파일은 라이선스 제한의 적용을 받을 수 있습니다.