1P by neo 2023-07-10 | favorite | 댓글 1개
  • .NET 모듈 파일 형식의 한계를 탐구하여 표준 출력에 "Hello, World!"를 출력하는 가장 작은 실행 파일을 생성합니다.
  • 실험을 위해 작성자는 C# 또는 CIL로 구현된 관리되는 진입점을 사용하고, .NET Framework 4.x.x에서 실행되며, 제3자 종속성이 없도록 임의의 규칙을 설정합니다.
  • 실행 파일의 크기를 점진적으로 줄이기 위해 null 가능 참조 주석을 비활성화하고, .NET 모듈을 수동으로 작성하며, 가져오기와 기본 재배치를 제거하고, 불필요한 메타데이터를 제거하고, ASCII 문자열의 사용을 최적화합니다.
  • 최종 결과는 유효한 .NET PE 파일의 이론적으로 가능한 최소 크기인 889바이트의 실행 파일입니다.
  • 기사에서는 실행 파일 크기를 줄이기 위해 수행한 각 단계의 코드 예제와 설명을 제공합니다.
  • 작성자는 파일 형식을 이해하고 실행 파일 크기를 최적화하기 위해 전략적인 결정을 내리는 중요성을 강조합니다.
  • 사용되지 않는 패딩 세그먼트로 문자열을 이동하면 파일이 13바이트로 줄어듭니다.
  • mscorlib에 대한 참조를 제거하면 이진 파일의 공간을 절약할 수 있습니다.
  • .NET 메타데이터 디렉토리의 VersionString을 잘라내면 추가 바이트를 절약할 수 있습니다.
  • 이진 파일의 최종 크기는 834바이트이며, 압축 시 476바이트로 더 줄일 수 있습니다.
  • 의미 없는 프로젝트임에도 불구하고, 기존 시스템의 한계를 탐구하는 것은 재미있을 수 있습니다.
  • 작성자는 참고를 위해 전체 소스 코드를 GitHub에서 제공합니다.
  • 기사에서는 역공학, 코드 골프, PE 파일 최적화에 대해 논의합니다.
  • 작성자는 자신의 경험을 공유하고 파일 크기를 줄이는 추가적인 탐구를 장려합니다.
  • 이 기사는 작성자에 의해 CC BY 4.0로 라이선스가 부여되었습니다.
Hacker News 의견
  • Michal Strehovský가 .NET을 사용하여 8KB 미만으로 스네이크 게임을 만들었습니다.
  • 실행 파일이 시스템에 설치된 런타임을 필요로 하기 때문에 이 기사는 사람들을 혼란스럽게 할 수 있습니다.
  • 실제 실행 파일에 대한 신뢰할 만한 출처는 Native AOT 바이너리입니다.
  • 저자의 위치는 흥미로운 남극 맥머도 스테이션입니다.
  • 섹션 정렬이 0x200 바이트이므로 파일 크기가 커집니다.
  • 데모신은 1k 바이너리를 만들어냈습니다.
  • 바이너리의 세부 사항을 파헤치면 깊은 통찰력을 얻고 지식을 풍부하게 할 수 있습니다.
  • 완전히 독립적으로 컴파일된 C# Hello World는 약 440 kB 정도의 크기로 가능합니다.
  • .NET 클래식 프레임워크는 폐기되었으며 새로운 앱은 이에 구축되지 않아야 합니다.
  • C 컴파일러를 사용하여 컴파일하는 것이 .NET을 사용하는 것보다 쉬울 수 있습니다.
  • 일부 의견에서는 네이티브로 컴파일된 .NET 실행 파일에 관심을 표현하고 있습니다.
  • Oberon+ IDE의 Hello.dll 모듈은 단지 2048 바이트입니다.
  • TurboPascal v1을 사용하여 1k 미만의 Hello World com을 빌드했습니다.