mes/elf.mes

278 lines
6.3 KiB
Plaintext
Raw Normal View History

;;; -*-scheme-*-
(define ei-magic '(#x7f #\E #\L #\F))
;;(define ei-magic '(#x7f #x45 #x4c #x46))
(define ei-class '(#x01)) ;; 32 bit
(define ei-data '(#x01)) ;; little endian
(define ei-version '(#x01))
(define ei-osabi '(#x00))
(define ei-pad '(#x0 #x0 #x0 #x0 #x0 #x0 #x0 #x0))
(define e-ident
(append
ei-magic
ei-class
ei-data
ei-version
ei-osabi
ei-pad))
(define e-type '(#x02 #x00)) ;; ET_EXEC
(define e-machine '(#x03 #x00))
(define e-version '(#x01 #x00 #x00 #x00))
(define e-entry '(#x54 #x80 #x04 #x08))
2016-08-12 14:38:59 +00:00
(define e-phoff '(#x34 #x00 #x00 #x00))
(define e-shoff '(#xb8 #x10 #x00 #x00))
(define e-flags '(#x00 #x00 #x00 #x00))
2016-08-12 14:38:59 +00:00
(define e-ehsize '(#x34 #x00))
(define e-phentsize '(#x20 #x00))
(define e-phnum '(#x01 #x00))
(define e-shentsize '(#x28 #x00))
(define e-shnum '(#x05 #x00))
(define e-shstrndx '(#x04 #x00))
(define elf-header
(append
e-ident
e-type
e-machine
e-version
e-entry
e-phoff
e-shoff
e-flags
e-ehsize
e-phentsize
e-phnum
e-shentsize
e-shnum
e-shstrndx
))
2016-08-12 14:38:59 +00:00
;; 34
(define p-type '(#x01 #x00 #x00 #x00))
(define p-offset '(#x54 #x00 #x00 #x00))
(define p-vaddr '(#x54 #x80 #x04 #x08))
;; 40
(define p-paddr '(#x54 #x80 #x04 #x08))
(define p-filesz '(#x10 #x30 #x00 #x00))
(define p-memsz '(#x10 #x30 #x00 #x00))
(define p-flags '(#x07 #x00 #x00 #x00))
;; 50
(define p-align '(#x01 #x00 #x00 #x00))
(define program-header-0
(append
2016-08-12 14:38:59 +00:00
p-type
p-offset
p-vaddr
p-paddr
p-filesz
p-memsz
p-flags
p-align
))
(define program-headers
(append
program-header-0
))
2016-08-12 14:38:59 +00:00
(define sh-0-name '(#x99 #x99 #x00 #x00))
(define sh-0-type '(#x00 #x00 #x00 #x00))
(define sh-0-flags '(#x00 #x00 #x00 #x00))
(define sh-0-addr '(#x00 #x00 #x00 #x00))
(define sh-0-offset '(#x00 #x00 #x00 #x00))
(define sh-0-size '(#x00 #x00 #x00 #x00))
(define sh-0-link '(#x00 #x00 #x00 #x00))
(define sh-0-info '(#x00 #x00 #x00 #x00))
(define sh-0-addralign '(#x00 #x00 #x00 #x00))
(define sh-0-entsize '(#x00 #x00 #x00 #x00))
(define sh-0
(append
sh-0-name
sh-0-type
sh-0-flags
sh-0-addr
sh-0-offset
sh-0-size
sh-0-link
sh-0-info
sh-0-addralign
sh-0-entsize
))
2016-08-12 14:38:59 +00:00
;; 10e0 sh1: .text
(define sh-text-name '(#x0b #x00 #x00 #x00))
(define sh-text-type '(#x01 #x00 #x00 #x00))
(define sh-text-flags '(#x06 #x00 #x00 #x00))
(define sh-text-addr '(#x54 #x80 #x04 #x08))
(define sh-text-offset '(#x54 #x00 #x00 #x00))
(define sh-text-size '(#x22 #x00 #x00 #x00))
(define sh-text-link '(#x00 #x00 #x00 #x00))
(define sh-text-info '(#x00 #x00 #x00 #x00))
(define sh-text-addralign '(#x01 #x00 #x00 #x00))
(define sh-text-entsize '(#x00 #x00 #x00 #x00))
(define sh-text
(append
sh-text-name
sh-text-type
sh-text-flags
sh-text-addr
sh-text-offset
sh-text-size
sh-text-link
sh-text-info
sh-text-addralign
sh-text-entsize
))
2016-08-12 14:38:59 +00:00
;; 1108 sh2: .data
(define sh-data-name '(#x11 #x00 #x00 #x00))
(define sh-data-type '(#x01 #x00 #x00 #x00))
(define sh-data-flags '(#x03 #x00 #x00 #x00))
(define sh-data-addr '(#x76 #x90 #x04 #x08))
(define sh-data-offset '(#x76 #x10 #x00 #x00))
(define sh-data-size '(#x0e #x00 #x00 #x00))
(define sh-data-link '(#x00 #x00 #x00 #x00))
(define sh-data-info '(#x00 #x00 #x00 #x00))
(define sh-data-addralign '(#x01 #x00 #x00 #x00))
(define sh-data-entsize '(#x00 #x00 #x00 #x00))
(define sh-data
(append
sh-data-name
sh-data-type
sh-data-flags
sh-data-addr
sh-data-offset
sh-data-size
sh-data-link
sh-data-info
sh-data-addralign
sh-data-entsize
))
2016-08-12 14:38:59 +00:00
;; 1130 sh3: .note
(define sh-note-name '(#x17 #x00 #x00 #x00))
(define sh-note-type '(#x07 #x00 #x00 #x00))
(define sh-note-flags '(#x00 #x00 #x00 #x00))
(define sh-note-addr '(#x00 #x00 #x00 #x00))
(define sh-note-offset '(#x84 #x10 #x00 #x00))
(define sh-note-size '(#x14 #x00 #x00 #x00))
(define sh-note-link '(#x00 #x00 #x00 #x00))
(define sh-note-info '(#x00 #x00 #x00 #x00))
(define sh-note-addralign '(#x01 #x00 #x00 #x00))
(define sh-note-entsize '(#x00 #x00 #x00 #x00))
(define sh-note
(append
sh-note-name
sh-note-type
sh-note-flags
sh-note-addr
sh-note-offset
sh-note-size
sh-note-link
sh-note-info
sh-note-addralign
sh-note-entsize
))
2016-08-12 14:38:59 +00:00
;; 1158 sh4: .shstrtab
(define sh-tab-name '(#x01 #x00 #x00 #x00))
(define sh-tab-type '(#x03 #x00 #x00 #x00))
(define sh-tab-flags '(#x00 #x00 #x00 #x00))
(define sh-tab-addr '(#x00 #x00 #x00 #x00))
(define sh-tab-offset '(#x98 #x10 #x00 #x00))
(define sh-tab-size '(#x1d #x00 #x00 #x00))
(define sh-tab-link '(#x00 #x00 #x00 #x00))
(define sh-tab-info '(#x00 #x00 #x00 #x00))
(define sh-tab-addralign '(#x01 #x00 #x00 #x00))
(define sh-tab-entsize '(#x00 #x00 #x00 #x00))
(define sh-tab
(append
sh-tab-name
sh-tab-type
sh-tab-flags
sh-tab-addr
sh-tab-offset
sh-tab-size
sh-tab-link
sh-tab-info
sh-tab-addralign
sh-tab-entsize
))
2016-08-12 14:38:59 +00:00
(define section-headers
(append
sh-0
sh-text
sh-data
sh-note
sh-tab
))
2016-08-12 14:38:59 +00:00
;;0054 (+ 0804 8000): 0804 8054
(define text
'(
#xba #x0e #x00 #x00 #x00 ;; mov $0xe,%edx
#xb9 #x76 #x90 #x04 #x08 ;; mov $0x8049076,%ecx
#xbb #x01 #x00 #x00 #x00 ;; mov $0x1,%ebx
#xb8 #x04 #x00 #x00 #x00 ;; mov $0x4,%eax
#xcd #x80 ;; int $0x80
#xbb #x00 #x00 #x00 #x00 ;; mov $0x0,%ebx
#xb8 #x01 #x00 #x00 #x00 ;; mov $0x1,%eax
#xcd #x80 ;; int $0x80
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
))
2016-08-12 14:38:59 +00:00
(define text-free
(vector->list (make-vector (- #x1076 #x80 ) #x00))
)
2016-08-12 14:38:59 +00:00
;; 1076
(define data
'(
#\H #\e #\l #\l #\o #\, #\space #\w #\o #\r
#\l #\d #\! #\newline
))
2016-08-12 14:38:59 +00:00
(define note
'(
#x05 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x02 #x00 #x00 #x00
#\i #\3 #\8 #\6 #x00 #x00 #x00 #x00
))
2016-08-12 14:38:59 +00:00
;; 1098 sh str table
(define tab
'(
2016-08-12 14:38:59 +00:00
#x00 #\. #\s #\h #\s #\t #\r #\t
2016-08-12 14:38:59 +00:00
#\a #\b #x00 #\. #\t #\e #\x #\t #x00 #\. #\d #\a #\t #\a #x00 #\.
#\n #\o #\t #\e #x00 #x00 #x00 #x00
))
(define exe
(append
elf-header
program-headers
text
text-free
;;1076 (+ 0804 8000): 0804 9076
data
;;1084
note
;;1098
tab
;;10b8
section-headers
))
(map write-char exe)