From 4853cb44e09303dd42b917fcdb56d00ccb3b2ef0 Mon Sep 17 00:00:00 2001 From: s-ol Date: Sat, 6 Nov 2021 18:39:08 +0100 Subject: wip --- elf.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'elf.py') diff --git a/elf.py b/elf.py index 62ba46d..8b7c6a7 100755 --- a/elf.py +++ b/elf.py @@ -191,27 +191,34 @@ def elf(iter): out = ELF( e_class=ELFCLASS.ELFCLASS32, e_data=ELFDATA.ELFDATA2LSB, - e_type=ET.ET_EXEC, + e_type=ET.ET_REL, e_machine=EM(0xF3), ) out.Elf.Ehdr.e_entry = next(s for s in segments if s["name"] == "code")["addr"] - out.Elf.Ehdr.e_flags = 4 out.Elf.Phdr_table.clear() - seg_ids = {} + sec_ids = {} for seg in segments: - flags = "rx" if seg["name"] == "code" else "rw" name = SECTION_NAMES[seg["name"]] - id = out._append_section(name, seg["content"], seg["addr"], sh_addralign=0x1000) - out.append_segment(id, flags=flags) - seg_ids[seg["name"]] = id + sec_flags = SHF.SHF_ALLOC + seg_flags = "w" + if seg["name"] == "code": + sec_flags |= SHF.SHF_EXECINSTR + seg_flags += "x" + else: + sec_flags |= SHF.SHF_WRITE + seg_flags += "w" + + id = out._append_section(name, seg["content"], seg["addr"], sh_addralign=4, sh_flags=sec_flags) + # out.append_segment(id, flags=seg_flags) + sec_ids[seg["name"]] = id for label in labels: - sect_id = seg_ids[label["segment"]] + sect_id = sec_ids[label["segment"]] out.append_symbol( - label["name"], sect_id, label["offset"], 4, sym_type=STT.STT_FUNC + label["name"], sect_id, label["offset"], 4, sym_type=STT.STT_FUNC, sym_binding=STB.STB_GLOBAL ) sys.stdout.buffer.write(bytes(out)) -- cgit v1.2.3