colorful rat Ratfactor.com > Dave's Repos

mez

A utility for ELF header experiments written in Zig
git clone http://ratfactor.com/repos/mez/mez.git

mez/README.md

Download raw file: README.md

1 # MEZ = Meow5 + ELF + Zig 2 3 This is a utility written in Zig to help me debug the 32-bit ELF executables 4 I'm exporting from 5 <a href="https://ratfactor.com/meow5/">Meow5</a>, 6 my toy language experiment. 7 8 It's highly visual and shows me exactly what I want to know about: 9 10 * Program segments (of type LOAD) 11 * Entry point address 12 * Hex dump of the data that will be loaded 13 * *Where* in the hex dump that entry point address lives! 14 15 It also includes a `zem.zig` program that writes a multi-segment 16 ELF exectuable that prints "Hello world." to make sure I'm doing 17 it right. 18 19 Example output (of Meow5 executable itself): 20 21 <pre style="background: #000; color: #DDD;"> 22 $ mez meow5 23 +-[ELF Header]------------------------------------------+ 24 | <font color="#00AA00">7F</font> <font color="#00AA00">E</font> <font color="#00AA00">L</font> <font color="#00AA00">F</font> 01 01 01 00 <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> 02 00 | 25 | 03 00 01 00 00 00 <font color="#FF55FF">FA</font> <font color="#FF55FF">A5</font> <font color="#FF55FF">04</font> <font color="#FF55FF">08</font> <font color="#FFFF55">34</font> <font color="#FFFF55">00</font> <font color="#FFFF55">00</font> <font color="#FFFF55">00</font> <font color="#AAAAAA">88</font> <font color="#AAAAAA">6A</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> | 26 | <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> 34 00 <font color="#FFFF55">20</font> <font color="#FFFF55">00</font> <font color="#FFFF55">03</font> <font color="#FFFF55">00</font> <font color="#AAAAAA">28</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">0B</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">0A</font> <font color="#AAAAAA">00</font> /-----+ 27 +--+---------------------------------------------/ 28 +-- Entry point address: <font color="#FF55FF">0x0804A5FA</font> 29 +-- Program header file offset: <font color="#FFFF55">0x34</font> 30 +-- Program header size: <font color="#FFFF55">32 (0x20)</font> 31 \-- Program header count: <font color="#FFFF55">3</font> 32 | 33 +-- Program Header 0 at 0x34, type: <font color="#55FFFF">PT_LOAD</font> 34 +-- Program Header 1 at 0x54, type: <font color="#55FFFF">PT_LOAD</font> 35 +-- Program Header 2 at 0x74, type: <font color="#55FFFF">PT_LOAD</font> 36 37 +-[<font color="#FFFF55">Program Header 0</font>]------------------------------+ 38 | <font color="#55FFFF">01</font> <font color="#55FFFF">00</font> <font color="#55FFFF">00</font> <font color="#55FFFF">00</font> <font color="#AA5500">00</font> <font color="#AA5500">00</font> <font color="#AA5500">00</font> <font color="#AA5500">00</font> <font color="#AA00AA">00</font> <font color="#AA00AA">80</font> <font color="#AA00AA">04</font> <font color="#AA00AA">08</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">80</font> <font color="#AAAAAA">04</font> <font color="#AAAAAA">08</font> | 39 | <font color="#AA5500">94</font> <font color="#AA5500">00</font> <font color="#AA5500">00</font> <font color="#AA5500">00</font> <font color="#AA00AA">94</font> <font color="#AA00AA">00</font> <font color="#AA00AA">00</font> <font color="#AA00AA">00</font> <font color="#AA00AA">04</font> <font color="#AA00AA">00</font> <font color="#AA00AA">00</font> <font color="#AA00AA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">10</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> | 40 +--+----------------------------------------------+ 41 +-- File data start offset: <font color="#AA5500">0x0</font> 42 +-- File data bytes to load: <font color="#AA5500">148 (0x94)</font> 43 +-- Memory segment start addr: <font color="#AA00AA">0x08048000</font> 44 +-- Memory segment byte size: <font color="#AA00AA">148 (0x94)</font> 45 +-- Memory segment flags: <font color="#AA00AA">R (0x4)</font> 46 from 8048000 to 8048094... 47 0x08048000 <font color="#AAAAAA">7f 45 4c 46 01 01 01 00 00 00 00 00 </font>.<font color="#00AAAA">ELF</font>........ 48 0x0804800c <font color="#AAAAAA">00 00 00 00 02 00 03 00 01 00 00 00 </font>............ 49 0x08048018 <font color="#AAAAAA">fa a5 04 08 34 00 00 00 88 6a 00 00 </font>....<font color="#00AAAA">4</font>....<font color="#00AAAA">j</font>.. 50 0x08048024 <font color="#AAAAAA">00 00 00 00 34 00 20 00 03 00 28 00 </font>....<font color="#00AAAA">4</font>.....<font color="#00AAAA">(</font>. 51 ...100 more bytes to load... 52 53 +-[<font color="#FFFF55">Program Header 1</font>]------------------------------+ 54 | <font color="#55FFFF">01</font> <font color="#55FFFF">00</font> <font color="#55FFFF">00</font> <font color="#55FFFF">00</font> <font color="#AA5500">00</font> <font color="#AA5500">10</font> <font color="#AA5500">00</font> <font color="#AA5500">00</font> <font color="#AA00AA">00</font> <font color="#AA00AA">90</font> <font color="#AA00AA">04</font> <font color="#AA00AA">08</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">90</font> <font color="#AAAAAA">04</font> <font color="#AAAAAA">08</font> | 55 | <font color="#AA5500">19</font> <font color="#AA5500">18</font> <font color="#AA5500">00</font> <font color="#AA5500">00</font> <font color="#AA00AA">19</font> <font color="#AA00AA">18</font> <font color="#AA00AA">00</font> <font color="#AA00AA">00</font> <font color="#AA00AA">05</font> <font color="#AA00AA">00</font> <font color="#AA00AA">00</font> <font color="#AA00AA">00</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">10</font> <font color="#AAAAAA">00</font> <font color="#AAAAAA">00</font> | 56 +--+----------------------------------------------+ 57 +-- File data start offset: <font color="#AA5500">0x1000</font> 58 +-- File data bytes to load: <font color="#AA5500">6169 (0x1819)</font> 59 +-- Memory segment start addr: <font color="#AA00AA">0x08049000</font> 60 +-- Memory segment byte size: <font color="#AA00AA">6169 (0x1819)</font> 61 +-- Memory segment flags: <font color="#AA00AA">R+X (0x5)</font> 62 +-- <font color="#FF55FF">Contains entry point 0x0804A5FA</font> 63 from 8049000 to 804a819... 64 0x08049000 <font color="#AAAAAA">5b b8 01 00 00 00 cd 80 a1 a4 c9 04 </font><font color="#00AAAA">[</font>........... 65 0x0804900c <font color="#AAAAAA">08 ff e0 00 00 00 00 08 00 00 00 0f </font>............ 66 0x08049018 <font color="#AAAAAA">00 00 00 03 00 00 00 65 78 69 74 00 </font>.......<font color="#00AAAA">exit</font>. 67 0x08049024 <font color="#AAAAAA">58 b9 00 00 00 00 80 3c 08 00 74 03 </font><font color="#00AAAA">X</font>......<font color="#00AAAA">&lt;</font>..<font color="#00AAAA">t</font>. 68 ...Skipping to entry point... 69 0x0804a5f0 <font color="#AAAAAA">00 6d 61 6b 65 5f 65 6c 66 00 </font><span style="background-color:#FF55FF"><font color="#000000">fc</font></span> c7 .<font color="#00AAAA">make_elf</font>... 70 0x0804a5fc <font color="#AAAAAA">05 3c b1 04 08 02 00 00 00 c7 05 44 </font>.<font color="#00AAAA">&lt;</font>.........<font color="#00AAAA">D</font> 71 0x0804a608 <font color="#AAAAAA">b1 04 08 00 00 00 00 c7 05 4c b1 04 </font>.........<font color="#00AAAA">L</font>.. 72 </pre> 73