import struct import subprocess import sys import tempfile import unittest from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) import unwrap_self SELF_MAGIC = 0x1D3D154F ELF_HEADER_OFFSET = 0x1A0 PROGRAM_TABLE_OFFSET = 0x40 PT_LOAD = 1 PT_DYNAMIC = 2 FIRST_REGION = 0x400 HEADER = b"\x7fELF\x02\x01\x01\x09" + b"\x00" * 56 PAGE = 0x1000 def pattern(seed, size): return bytes((seed + index * 7) % 251 for index in range(size)) def build_elf(segments): header = bytearray(HEADER) struct.pack_into("