blob: 6c2029554cd2d78cf20e771732a2a81486308895 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
~ cat labels.e elf.e hello.e | ./quine > hello && chmod 755 hello && ./hello
: output-start-routine
current-offset L!' cold-start
1 :rax mov-reg64-imm32
1 :rdi mov-reg64-imm64
L@' origin L@' greeting + :rsi mov-reg64-imm64
L@' greeting-size :rdx mov-reg64-imm64
syscall
60 :rax mov-reg64-imm32
0 :rdi mov-reg64-imm32
syscall
;
: output-greeting
current-offset dup L!' greeting 3unroll
s" Hello, Irenes!" packstring
current-offset 4 roll - L!' greeting-size ;
~ (output memory start, current output point
~ -- output memory start, current output point)
~
~ Everything directly called by all-contents has this same interface.
~
: all-contents
0x08000000 L!' origin
elf-file-header
elf-program-header
output-start-routine
output-greeting
current-offset L!' total-size
;
' all-contents entry-to-execution-token label-loop
swap sys-write bye
|