2016-08-12 12:17:55 +00:00
|
|
|
;;; -*-scheme-*-
|
|
|
|
|
2016-08-12 13:10:05 +00:00
|
|
|
(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))
|
2016-08-12 13:54:15 +00:00
|
|
|
(define e-entry '(#x54 #x80 #x04 #x08))
|
|
|
|
(define e-phoff '(#x30 #x00 #x00 #x00))
|
|
|
|
(define e-shoff '(#x50 #x00 #x00 #x00))
|
2016-08-12 13:10:05 +00:00
|
|
|
(define e-flags '(#x00 #x00 #x00 #x00))
|
2016-08-12 13:54:15 +00:00
|
|
|
(define e-ehsize '(#x80 #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))
|
2016-08-12 13:10:05 +00:00
|
|
|
|
|
|
|
(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
|
|
|
|
))
|
|
|
|
|
|
|
|
;;(define elf-header '(#x7f #x45 #x4c #x46 #x01))
|
|
|
|
(define program-header
|
|
|
|
(append
|
|
|
|
;; p-offset
|
|
|
|
;; p-type
|
|
|
|
;; p-offset
|
|
|
|
;; p-vaddr
|
|
|
|
;; p-paddr
|
|
|
|
;; p-filesz
|
|
|
|
;; p-memsz
|
|
|
|
;; p-flags
|
|
|
|
;; p-align
|
|
|
|
))
|
|
|
|
|
2016-08-12 13:54:15 +00:00
|
|
|
(define rest
|
|
|
|
'(
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00
|
|
|
|
|
|
|
|
))
|
|
|
|
|
|
|
|
(define exe
|
|
|
|
(append
|
|
|
|
elf-header
|
|
|
|
rest))
|
|
|
|
(map write-char exe)
|