#!/usr/bin/env python3 """Extract exact full C bodies and bind offsets/full-file SHA/slice SHA.""" import argparse, hashlib, json, pathlib, re ap=argparse.ArgumentParser();ap.add_argument("--sources",type=pathlib.Path,required=True);ap.add_argument("--output",type=pathlib.Path,required=True);args=ap.parse_args() if not args.output.absolute().is_relative_to(pathlib.Path("/var/tmp")) or args.output.absolute().resolve()!=args.output.absolute(): raise ValueError("Explicit private /var/tmp output required") args.output.mkdir(parents=True,exist_ok=True) bindings=[] def extract(component,relative,name): path=args.sources/component/relative;raw=path.read_bytes() # Definitions have their opening brace before the next semicolon. found=[] for match in re.finditer(rb"^(?:static )?(?:struct [A-Za-z_0-9]+ \*|bool |void |int )"+name.encode()+rb"\(",raw,re.M): a=match.start();opening=raw.index(b"{",match.end());semi=raw.find(b";",match.end()) if semi>=0 and semi