This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
"""Unit test for strict PS5 ELF import parsing."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import importlib.util
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--root", type=Path, required=True)
|
||||
args = parser.parse_args()
|
||||
tool_path = args.root.resolve() / "tools/audit_ps5_artifacts.py"
|
||||
specification = importlib.util.spec_from_file_location("artifact_audit", tool_path)
|
||||
if specification is None or specification.loader is None:
|
||||
raise RuntimeError("could not load artifact-audit module")
|
||||
module = importlib.util.module_from_spec(specification)
|
||||
specification.loader.exec_module(module)
|
||||
|
||||
fixture = """
|
||||
U fprintf
|
||||
U sceKernelCreateEqueue
|
||||
U sceVideoOutOpen
|
||||
0000000000001234 T sceVideoOutClose
|
||||
"""
|
||||
imports = module.extract_sce_imports(fixture)
|
||||
if imports != {"sceKernelCreateEqueue", "sceVideoOutOpen"}:
|
||||
raise RuntimeError(f"unexpected parsed imports: {imports}")
|
||||
if len(module.EXPECTED_PHASE1_SCE_IMPORTS) != 15:
|
||||
raise RuntimeError("reviewed Phase-1 import inventory changed")
|
||||
if any(name.startswith("sceGnm") for name in module.EXPECTED_PHASE1_SCE_IMPORTS):
|
||||
raise RuntimeError("reviewed Phase-1 import inventory contains GNM")
|
||||
all_imports = module.extract_undefined_imports(fixture)
|
||||
if all_imports != {"fprintf", "sceKernelCreateEqueue", "sceVideoOutOpen"}:
|
||||
raise RuntimeError(f"unexpected full import inventory: {all_imports}")
|
||||
if module.EXPECTED_PROBE_UNDEFINED_IMPORTS != {
|
||||
"__stderrp",
|
||||
"__stdoutp",
|
||||
"fprintf",
|
||||
"fwrite",
|
||||
"snprintf",
|
||||
"strcmp",
|
||||
}:
|
||||
raise RuntimeError("reviewed probe import inventory changed")
|
||||
dynamic_fixture = """
|
||||
0x0000000000000001 (NEEDED) Shared library: [libkernel_web.sprx]
|
||||
0x0000000000000001 (NEEDED) Shared library: [libSceLibcInternal.sprx]
|
||||
0x0000000000000001 (NEEDED) Shared library: [libSceNet.sprx]
|
||||
"""
|
||||
if module.extract_needed(dynamic_fixture) != module.EXPECTED_PROBE_NEEDED:
|
||||
raise RuntimeError("reviewed probe DT_NEEDED inventory changed")
|
||||
print("PS5 artifact-audit parser passed")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user