mirror of
https://github.com/frida/frida-node.git
synced 2026-11-07 09:35:57 -10:00
56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tarfile
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
|
|
def main(argv: list[str]):
|
|
args = argv[1:]
|
|
strip_command = pop_cmd_array_arg(args)
|
|
strip_enabled = args.pop(0) == "true"
|
|
binding = Path(args.pop(0))
|
|
outfile = Path(args.pop(0))
|
|
|
|
intermediate_path = outfile.parent / f"{outfile.name}.tmp"
|
|
shutil.copy(binding, intermediate_path)
|
|
|
|
try:
|
|
if strip_enabled and strip_command is not None:
|
|
subprocess.run(
|
|
strip_command + [intermediate_path],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.STDOUT,
|
|
encoding="utf-8",
|
|
check=True,
|
|
)
|
|
|
|
with tarfile.open(outfile, "w:gz") as tar:
|
|
tar.add(intermediate_path, arcname="build/frida_binding.node")
|
|
except subprocess.CalledProcessError as e:
|
|
print(e, file=sys.stderr)
|
|
print("Output:\n\t| " + "\n\t| ".join(e.output.strip().split("\n")), file=sys.stderr)
|
|
sys.exit(1)
|
|
finally:
|
|
os.unlink(intermediate_path)
|
|
|
|
|
|
def pop_cmd_array_arg(args: list[str]) -> Optional[list[str]]:
|
|
result = []
|
|
first = args.pop(0)
|
|
assert first == ">>>"
|
|
while True:
|
|
cur = args.pop(0)
|
|
if cur == "<<<":
|
|
break
|
|
result.append(cur)
|
|
if len(result) == 1 and not result[0]:
|
|
return None
|
|
return result
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main(sys.argv)
|