mirror of
https://github.com/lief-project/LIEF
synced 2026-06-08 15:30:44 +00:00
41 lines
1.2 KiB
Python
Executable File
41 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
'''
|
|
This script lists libraries embedded in a dyld shared cache file
|
|
|
|
Note: this script is only working with the extended version of LIEF
|
|
'''
|
|
|
|
import sys
|
|
import lief
|
|
import argparse
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("target", type=Path,
|
|
help='Target dyld shared file (file or dir)')
|
|
args = parser.parse_args()
|
|
|
|
target: Path = args.target
|
|
if not target.exists():
|
|
print(f"'{target}' does not exist")
|
|
return 1
|
|
|
|
dyld_cache = lief.dsc.load(target)
|
|
if dyld_cache is None:
|
|
print(f"Can't parse '{target}'")
|
|
|
|
for lib in dyld_cache.libraries:
|
|
print(f"0x{lib.address:016x} {lib.path}")
|
|
|
|
for idx, info in enumerate(dyld_cache.mapping_info):
|
|
print(f"mapping_info[{idx:02d}]: [{info.address:016x}, {info.end_address:016x}] -> 0x{info.file_offset:016x}")
|
|
|
|
for idx, subcache in enumerate(dyld_cache.subcaches):
|
|
uuid_str = ':'.join(map(lambda e: f"{e:02x}", subcache.uuid))
|
|
print(f"cache[{idx:02d}]: {uuid_str} {subcache.suffix}")
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|