;;; -*-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)) (define e-phoff '(#x34 #x00 #x00 #x00)) (define e-shoff '(#xb8 #x10 #x00 #x00)) (define e-flags '(#x00 #x00 #x00 #x00)) (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 )) ;; 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 p-type p-offset p-vaddr p-paddr p-filesz p-memsz p-flags p-align )) (define program-headers (append program-header-0 )) (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 )) ;; 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 )) ;; 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 )) ;; 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 )) ;; 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 )) (define section-headers (append sh-0 sh-text sh-data sh-note sh-tab )) ;;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 )) (define text-free (vector->list (make-vector (- #x1076 #x80 ) #x00)) ) ;; 1076 (define data '( #\H #\e #\l #\l #\o #\, #\space #\w #\o #\r #\l #\d #\! #\newline )) (define note '( #x05 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x02 #x00 #x00 #x00 #\i #\3 #\8 #\6 #x00 #x00 #x00 #x00 )) ;; 1098 sh str table (define tab '( #x00 #\. #\s #\h #\s #\t #\r #\t #\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)