1
# Thank you: https://github.com/Lzhiyong/termux-ndk/blob/master/patches/align_fix.py
8
print('Usage: ' + os.path.basename(sys.argv[0]) + ' input_file')
11
with open(sys.argv[1], 'r+b') as f:
14
if hdr[0] != 0x7f or hdr[1] != ord('E') or hdr[2] != ord('L') or hdr[3] != ord('F'):
15
raise Exception('Not an elf file')
20
offset = struct.unpack('<I', f.read(4))[0]
22
phsize = struct.unpack('<H', f.read(2))[0]
23
phnum = struct.unpack('<H', f.read(2))[0]
24
for i in range(0, phnum):
25
f.seek(offset + i * phsize)
26
t = struct.unpack('<I', f.read(4))[0]
29
align = struct.unpack('<I', f.read(4))[0]
30
print('Found TLS segment with align = ' + str(align))
32
print('TLS segment is underaligned, patching')
34
f.write(struct.pack('<I', 32))
39
offset = struct.unpack('<Q', f.read(8))[0]
41
phsize = struct.unpack('<H', f.read(2))[0]
42
phnum = struct.unpack('<H', f.read(2))[0]
43
for i in range(0, phnum):
44
f.seek(offset + i * phsize)
45
t = struct.unpack('<I', f.read(4))[0]
48
align = struct.unpack('<Q', f.read(8))[0]
49
print('Found TLS segment with align = ' + str(align))
51
print('TLS segment is underaligned, patching')
53
f.write(struct.pack('<H', 64))
56
raise Exception('Unknown file class')