Hội cho x86 Linux, 106 byte
BITS 32
                org     0x2E620000
                db      0x7F, "ELF", 1, 1, 1, 0 ; e_ident
                dd      0, 0
                dw      2                       ; e_type
                dw      3                       ; e_machine
                dd      1                       ; e_version
                dd      _start                  ; e_entry
                dd      phdr - $$               ; e_phoff
                dd      0                       ; e_shoff
                dd      0                       ; e_flags
                dw      0x34                    ; e_ehsize
                dw      0x20                    ; e_phentsize
phdr:           dd      1                       ; e_phnum       ; p_type
                                                ; e_shentsize
                dd      0                       ; e_shnum       ; p_offset
                                                ; e_shstrndx
                dd      $$                                      ; p_vaddr
fname           equ     $ - 2
                db      'out', 0                                ; p_paddr
                dd      filesize                                ; p_filesz
                dd      filesize                                ; p_memsz
                dd      5                                       ; p_flags
                dd      0x1000                                  ; p_align
_start:         mov     al, 5                   ; 5 = open syscall
                mov     ebx, fname
                mov     cl, 65                  ; 65 = O_WRONLY | O_CREAT
                mov     dx, 666q
                int     0x80
                lea     edx, [byte ecx + filesize - 65]
                xchg    eax, ebx
                xchg    eax, ecx
                mov     cl, 0
                mov     al, 4                   ; 4 = write syscall
                int     0x80
                mov     al, 1                   ; 1 = exit syscall
                int     0x80
filesize        equ     $ - $$
Đây là cho trình biên dịch hợp ngữ. Xây dựng nhị phân với dòng lệnh:nasm -f bin -o a.out selfrep.asm && chmod +x a.out
Đây là cùng một tệp như một kết xuất hex: 7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00 02 00 03 00 01 00 00 00 4C 00 62 2E 2C 00 00 00 00 00 00 00 00 00 00 00 34 00 20 00 01 00 00 00 00 00 00 00 00 00 62 2E 6F 75 74 00 6A 00 00 00 6A 00 00 00 05 00 00 00 00 10 00 00 B0 05 BB 36 00 62 2E B1 41 66 BA B6 01 CD 80 8D 51 29 93 91 B1 00 B0 04 CD 80 B0 01 CD 80
Theo yêu cầu, chương trình tự sao chép vào một tệp riêng biệt. (Chương trình có thể đã ngắn hơn đáng kể nếu nó được phép chỉ ghi vào thiết bị xuất chuẩn và cho phép người dùng chuyển hướng đến một tệp.)
Tôi tránh sử dụng bất kỳ thủ thuật biên giới để giảm kích thước. Đây phải là một nhị phân ELF 32 bit hoàn toàn phù hợp.
Chỉnh sửa để thêm : Trong phiên bản trên, tệp được tạo chỉ là một tệp đơn giản, nhưng đối với tôi, đối với một vài byte (và một chút quy tắc nhỏ), bạn có thể tạo ra thứ gì đó thú vị hơn một chút. Phiên bản này chỉ dài hơn hai byte, ở mức 108 byte:
BITS 32
                org     0x00010000
                db      0x7F, "ELF", 1, 1, 1, 0 ; e_ident
                dd      0, 0
                dw      2                       ; e_type
                dw      3                       ; e_machine
                dd      1                       ; e_version
                dd      _start                  ; e_entry
                dd      phdr - $$               ; e_phoff
                dd      0                       ; e_shoff
                dd      0                       ; e_flags
                dw      0x34                    ; e_ehsize
                dw      0x20                    ; e_phentsize
phdr:           dd      1                       ; e_phnum       ; p_type
                                                ; e_shentsize
                dd      0                       ; e_shnum       ; p_offset
                                                ; e_shstrndx
                dd      $$                                      ; p_vaddr
fname:          db      'asr', 0                                ; p_paddr
                dd      filesize                                ; p_filesz
                dd      filesize                                ; p_memsz
                dd      7                                       ; p_flags
                dd      0x1000                                  ; p_align
_start:         mov     al, 5                   ; 5 = open syscall
                mov     ebx, fname
                inc     byte [ebx]
                mov     cl, 65                  ; 65 = O_WRONLY | O_CREAT
                mov     dx, 777q
                int     0x80
                lea     edx, [byte ecx + filesize - 65]
                xchg    eax, ebx
                xchg    eax, ecx
                mov     cl, 0
                mov     al, 4                   ; 4 = write syscall
                int     0x80
                mov     al, 1                   ; 1 = exit syscall
                int     0x80
filesize        equ     $ - $$
Đặt tên cho phiên bản này là asr"tự sao chép":nasm -f bin -o asr asr.asm && chmod +x asr
Phiên bản kết xuất hex cho người khuyết tật:
7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00 02 00 03 00 01 00 00 00 4C 00 01 00 2C 00 00 00 00 00 00 00 00 00 00 00 34 00 20 00 01 00 00 00 00 00 00 00 00 00 01 00 61 73 72 00 6C 00 00 00 6C 00 00 00 07 00 00 00 00 10 00 00 B0 05 BB 38 00 01 00 FE 03 B1 41 66 BA FF 01 CD 80 8D 51 2B 93 91 B1 00 B0 04 CD 80 B0 01 CD 80
Khi bạn chạy nó, nó tạo ra một tệp gần như giống hệt nhau bsr, nhưng một tệp có thể thực thi được. Chạy nó sẽ tạo một tệp nhị phân khác có têncsr . Và như thế.
(Lưu ý rằng những điều gây phiền nhiễu bắt đầu xảy ra sau đó zsr. Tôi đã cân nhắc việc tạo một phiên bản xếp tầng thay đổi tên atr, v.v., nhưng tôi nghĩ rằng hầu hết mọi người sẽ chán trước đó, vì vậy có lẽ nó không đáng giá cho tất cả các byte bổ sung. )