XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8
"""Verify that removing offline DWARF leaves every runtime program segment byte-identical."""
import argparse
import hashlib
import json
from pathlib import Path
import struct


def segments(path):
    data = Path(path).read_bytes()
    assert data[:6] == b'\x7fELF\x02\x01', 'Expected little-endian ELF64'
    offset = struct.unpack_from('<Q', data, 32)[0]
    size, count = struct.unpack_from('<HH', data, 54)
    assert size == 56 and 0 < count <= 32
    records = []
    for index in range(count):
        kind, flags, at, virtual, physical, files, memory, alignment = struct.unpack_from('<IIQQQQQQ', data, offset + index*size)
        assert at + files <= len(data)
        records.append({'Type': kind, 'Flags': flags, 'Virtual': virtual, 'Physical': physical,
                        'FileBytes': files, 'MemoryBytes': memory, 'Alignment': alignment,
                        'Sha256': hashlib.sha256(data[at:at+files]).hexdigest()})
    return records


def verify(original, stripped):
    before, after = segments(original), segments(stripped)
    assert before == after, 'Removing DWARF changed a runtime ELF program segment'
    return {'Kind': 'XfeElfOfflineDebugRemoval', 'Passed': True, 'ProgramSegmentsByteIdentical': True,
            'OriginalBytes': Path(original).stat().st_size, 'ImageKernelBytes': Path(stripped).stat().st_size,
            'ProgramSegments': after}


if __name__ == '__main__':
    parser = argparse.ArgumentParser(); parser.add_argument('original'); parser.add_argument('stripped'); parser.add_argument('result')
    args = parser.parse_args()
    Path(args.result).write_text(json.dumps(verify(args.original, args.stripped), indent=2), encoding='utf-8')