383바이트로 완성한 Windows 앱, HelloAssembly 공개
HelloAssembly The smallest possible complete Windows application
PlummersSoftwareLLC의 HelloAssembly 프로젝트는 압축 없이 최소 크기의 완전한 Windows 애플리케이션을 만드는 것을 목표로 합니다. 이 저장소는 x86 어셈블리로 작성된 여러 버전의 코드를 제공하며, 현재 가장 작은 실행 파일은 Yasm으로 빌드한 383바이트입니다. 프로젝트는 Dave's Garage의 YouTube 에피소드에서 시작되었으며, Windows 메시지 루프, 제목 표시줄, 시스템 메뉴, 배경 페인팅 및 텍스트 표시 등 기본 기능을 모두 갖추고 있습니다. 바이러스 스캐너가 악성 코드로 오탐할 수 있다는 주의사항도 포함되어 있습니다.
최적화는 공격적이며, 특정 유형의 악성 코드가 사용하는 전략과 유사해 보일 수 있습니다.
HN 토론
51- rfgplk
"가장 작은 가능한"은 정확히 하나의 명령어입니다. 아마도 0xc3 [ret] 또는 0x90 [nop]일 것입니다. 문제는 "완전한 Windows 애플리케이션"을 어떻게 정의하느냐에 달려 있습니다. ABI 호환을 원하는지에 따라 답이 정말로 달라지기 때문입니다. 하지만 순수 바이너리 파일을 읽어서 실행 가능한 메모리로 매핑하고 실행하는 사용자 정의 로더/실행기를 만드는 것을 막을 수는 없습니다.
- abcd_f
MS-DOS용 가장 작은 의미 있는 프로그램은 정확히 2바이트였습니다:
FA F4
이는 CLI HLT로, 사실상 시스템을 교착 상태에 빠뜨렸습니다. 당연히 .exe가 아닌 .com 파일로 저장해야 했습니다.
- ggerules
Windows와 어셈블리는 재미있는 주제입니다!
"Windows"와 "assembly language" 검색어를 넣으면 온갖 책이 나옵니다. 제가 처음에 이 주제를 탐구하게 만든 책(1993년)은 [0]입니다.
어셈블리와 Windows를 더 최신으로 다루는 책은 IDE 소스 코드도 포함되어 있습니다. Ray Seyfarth의 책 [1]입니다.
[0] Windows Assembly Language & Systems Programming: Object Oriented & Low-Level Systems Programming in Assembly Language for Windows 3.X
[1] Introduction to 64 Bit Windows Assembly Language Programming: Fourth Edition
ISBN-13: 978-1543138849, ISBN-10: 1543138845
- delta_p_delta_x
CRT를 우회하고 Windows API를 직접 사용하는 것은 흥미롭습니다. 하지만 이는 대부분의 무거운 작업을 USER32.DLL과 KERNEL32.DLL에 의존합니다.
'어셈블리로 만든 가장 작은 hello world'와 비슷하지만, 코드는 단지 호출 규약을 설정하고 널 종료 문자열을 `write`에 전달하는 것뿐입니다. 멋지지만, C로도 더 간단하게 할 수 있습니다. 많은 어셈블리 코드(링크된 저장소 포함)는 플랫폼의 호출 규약을 위한 부기(book-keeping)에 불과합니다.
- haunter
한편, Unix 세계에서는 45바이트까지 줄일 수 있습니다. https://www.muppetlabs.com/~breadbox/software/tiny/teensy.ht...