diff --git a/scripts/libc_function_args/__init__.py b/scripts/libc_function_args/__init__.py index 1d45f87..bc1497e 100644 --- a/scripts/libc_function_args/__init__.py +++ b/scripts/libc_function_args/__init__.py @@ -7,6 +7,7 @@ __VERSION__ = 0.1 __LICENSE__ = "MIT" +import inspect import json import pathlib import re @@ -16,8 +17,8 @@ from .. import * -GLIBC_FUNCTION_ARGS_CURRENT_FILE = pathlib.Path(__file__) -GLIBC_FUNCTION_ARGS_CURRENT_DIRECTORY = GLIBC_FUNCTION_ARGS_CURRENT_FILE.parent +GLIBC_FUNCTION_ARGS_CURRENT_FILE = pathlib.Path(inspect.getfile(inspect.currentframe())).resolve() +GLIBC_FUNCTION_ARGS_CURRENT_DIRECTORY = pathlib.Path(inspect.getfile(inspect.currentframe())).parent.resolve() GLIBC_FUNCTION_ARGS_CONTEXT_PANE_INDEX = "libc_function_args" GLIBC_FUNCTION_ARGS_CONTEXT_PANE_DESCRIPTION = "Glibc Function Arguments" @@ -33,9 +34,7 @@ def load_libc_args() -> bool: """Load the LIBC function arguments. Returns `True` on success, `False` or an Exception otherwise.""" # load libc function arguments' definitions - path = ( - pathlib.Path(GLIBC_FUNCTION_ARGS_CURRENT_DIRECTORY).expanduser().absolute() - ) + path = GLIBC_FUNCTION_ARGS_CURRENT_DIRECTORY if not path.exists(): raise RuntimeError( "Config `context.libc_args_path` set but it's not a directory" diff --git a/scripts/libc_function_args/tables/generator.py b/scripts/libc_function_args/tables/generator.py index 0b4da74..ca57d70 100644 --- a/scripts/libc_function_args/tables/generator.py +++ b/scripts/libc_function_args/tables/generator.py @@ -2,6 +2,7 @@ __AUTHOR__ = "theguly" __VERSION__ = 0.2 +import inspect import gzip import json import logging @@ -36,7 +37,8 @@ def generate_json_file( for i in range(0, len(_value)): _dict[_key][_params[i]] = _value[i] - with open(outfile_name, "w") as outfile: + outfile_path = pathlib.Path(inspect.getfile(inspect.currentframe())).parent.resolve() / outfile_name + with open(outfile_path, "w") as outfile: json.dump(_dict, outfile) logging.info(f"{outfile_name} written") @@ -44,7 +46,7 @@ def generate_json_file( def generate_all_json_files() -> bool: - curdir = pathlib.Path(__file__).parent + curdir = pathlib.Path(inspect.getfile(inspect.currentframe())).parent.resolve() libc_file_path = curdir / "libc.txt.gz" libc_x86_funcdef_fpath = curdir / "x86_32.json" libc_x64_funcdef_fpath = curdir / "x86_64.json" diff --git a/scripts/syscall_args/__init__.py b/scripts/syscall_args/__init__.py index 5eed42b..0f9cbcb 100644 --- a/scripts/syscall_args/__init__.py +++ b/scripts/syscall_args/__init__.py @@ -6,6 +6,7 @@ __VERSION__ = 0.1 __LICENSE__ = "MIT" +import inspect import pathlib import re from importlib.machinery import SourceFileLoader @@ -14,8 +15,8 @@ if TYPE_CHECKING: from .. import * -CURRENT_FILE = pathlib.Path(__file__) -CURRENT_DIRECTORY = CURRENT_FILE.parent +CURRENT_FILE = pathlib.Path(inspect.getfile(inspect.currentframe())).resolve() +CURRENT_DIRECTORY = pathlib.Path(inspect.getfile(inspect.currentframe())).parent.resolve() CONTEXT_PANE_INDEX = "syscall_args" CONTEXT_PANE_DESCRIPTION = "Syscall Arguments" @@ -44,7 +45,7 @@ def __init__(self) -> None: super().__init__(prefix=False, complete=gdb.COMPLETE_NONE) self.__path: Optional[pathlib.Path] = None path = CURRENT_DIRECTORY / "syscall-tables" - self["path"] = (str(path.absolute()), + self["path"] = (str(path), "Path to store/load the syscall tables files") return