1 ;;;; Silly emacs, this is -*- Lisp -*-
6 ;; (defmethod describe-elf-header ((self elf-header))
7 ;; (format t "ELF Header:~&")
8 ;; (format t "Magic: ~X ~X ~X ~X ~X ~X ~X ~X ~X ~X ~X ~X ~X ~X ~X ~X ")
9 ;; (format t "Class: ~A~&") ;;) ELF32
10 ;; (format t "Data@ ~A~&" )
11 ;; (format t "Version ~A")
12 ;; (format t "OS/ABI ~A~&")
13 ;; (format t "Type ~A~&")
14 ;; (format t "Machine ~A~&")
15 ;; (format t "Version ~A~&")
16 ;; (format t "Entry Point Address ~A~&")
17 ;; (format t "Start of program headers ~A~&")
18 ;; (format t "Start of section headers ~A~&")
19 ;; (format t "Flags ~X~&")
20 ;; (format t "Size of this header ~X~&")
21 ;; (format t "Size of program headers ~X~&")
22 ;; (format t "Number of program headers ~X~&")
23 ;; (format t "Size of section headers ~X~&")
24 ;; (format t "Number of section headers ~X~&")
25 ;; (format t "Section header string table index ~X~&"))
30 (define-elf-class elf-header
31 ((e-magic (usb8-array :length
+EI_NIDENT
+))
32 (e-type (elf32-half) )
33 (e-machine (elf32-half))
34 (e-version (elf32-word))
35 (e-entry (elf32-addr))
38 (e-flags (elf32-word))
39 (e-ehsize (elf32-half))
40 (e-phentsize (elf32-half))
41 (e-phnum (elf32-half))
42 (e-shentsize (elf32-half))
43 (e-shnum (elf32-half))
44 (e-shstrndx (elf32-half))))
47 (define-elf-class elf32-program-header
49 (p-offset (elf32-off))
50 (p-vaddr (elf32-addr))
51 (p-paddr (elf32-addr))
57 (define-elf-class elf32-section-header
60 (sh-flags (elf32-addr))
61 (sh-addr (elf32-addr))
62 (sh-offset (elf32-off))
69 (define-elf-class elf32-sym
70 ((st-name (elf32-word))
71 (st-value (elf32-addr))
72 (st-size (elf32-word))
75 (st-shndx (elf32-half))))
77 (define-elf-class elf32-rela
78 ((r-offset (elf32-addr))
81 (define-elf-class elf32-rela-a
82 ((r-offset (elf32-addr))
87 (define-elf-class elf-dyn
88 ((d-tag (elf32-sword))
91 ;; ;; These constants define the different elf file types
92 ;; (defconstant +ET_NONE+ 0)
93 ;; (defconstant +ET_REL+ 1)
94 ;; (defconstant +ET_EXEC+ 2)
95 ;; (defconstant +ET_DYN+ 3)
96 ;; (defconstant +ET_CORE+ 4)
97 ;; (defconstant +ET_LOPROC+ #xff00)
98 ;; (defconstant +ET_HIPROC+ #xffff)
100 ;; descriptions go here
104 ;; to do -- alignment?
105 ;; -- read usb8 arrays
106 ;; little endan -- to do -- some way to switch to big endian eqivalents