blob: cafa8f46727fce8248b14cddac48b870b30f9c07 (
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
|
(let ( (elf (elf/new!))
(entrypoint 0x696000)
(toff 0x1000)
(phdroff 0x2000))
(elf/write-bytes! elf toff
'( 0xb8 0x3c 0x00 0x00 0x00 ;; mov rax, 60
0xbf 0x2a 0x00 0x00 0x00 ;; mov rdi, 42
0x0f 0x05 ;; syscall
))
(elf/write-program-header! elf (+ phdroff elf/64_PROGRAM_HEADER_SIZE)
:type elf/PROGRAM_HEADER_TYPE_LOAD
:offset toff
:virtual-addr entrypoint
:file-size 0x100
:mem-size 0x100
:flags (bitwise/or elf/PROGRAM_HEADER_FLAG_R elf/PROGRAM_HEADER_FLAG_X)
)
(elf/write-header! elf
:type elf/TYPE_EXEC
:machine elf/MACHINE_AMD64
:program-header-offset phdroff
:program-header-entry-size elf/64_PROGRAM_HEADER_SIZE
:program-header-entries 2
:section-header-offset 0
:section-header-entry-size elf/64_SECTION_HEADER_SIZE
:section-header-entries 0
:entry entrypoint
)
(elf/spit! "test.elf" elf))
|