Sorted out section classification.
[cl-elf.git] / elf-header.lisp
blob72b51b505e8b10252ed54e143878bd76081286c7
1 ;;;; Silly emacs, this is -*- Lisp -*-
3 (in-package :cl-elf)
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~&"))
27 ;; header ...
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))
36 (e-phoff (elf32-off))
37 (e-shoff (elf32-off))
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
48 ((p-type (u32))
49 (p-offset (elf32-off))
50 (p-vaddr (elf32-addr))
51 (p-paddr (elf32-addr))
52 (p_filesz (u32))
53 (p_memsz (u32))
54 (p_flags (u32))
55 (p_align (u32))))
57 (define-elf-class elf32-section-header
58 ((sh-name (u32))
59 (sh-type (u32))
60 (sh-flags (elf32-addr))
61 (sh-addr (elf32-addr))
62 (sh-offset (elf32-off))
63 (sh-size (u32))
64 (sh-link (u32))
65 (sh-info (u32))
66 (sh-addralign (u32))
67 (sh-entsize (u32))))
69 (define-elf-class elf32-sym
70 ((st-name (elf32-word))
71 (st-value (elf32-addr))
72 (st-size (elf32-word))
73 (st-info (u8))
74 (st-other (u8))
75 (st-shndx (elf32-half))))
77 (define-elf-class elf32-rela
78 ((r-offset (elf32-addr))
79 (r-info (u32))))
81 (define-elf-class elf32-rela-a
82 ((r-offset (elf32-addr))
83 (r-info (u32))
84 (r-addend (s32))))
87 (define-elf-class elf-dyn
88 ((d-tag (elf32-sword))
89 (d-un (u32))))
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