Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MarkBaggett/ccf8a441f788f6f631f9b5f0e5fa3de9 to your computer and use it in GitHub Desktop.
Save MarkBaggett/ccf8a441f788f6f631f9b5f0e5fa3de9 to your computer and use it in GitHub Desktop.
get environment variables from process id
def get_local_envvars_pid(process_id):
gdb_script = "set variable $envs = (char **) environ\nset $i = 0\nwhile ($envs[$i] != 0)\nprint $envs[$i++]\nend\nquit\n"
pathlib.Path("/tmp/getenv.gdb").write_text(gdb_script)
gdb_command = f"gdb -batch -x /tmp/getenv.gdb -p {process_id}"
ph = subprocess.Popen(gdb_command.split(),stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = ph.communicate()
log.debug(f"gdb environment variable output {out} errors {err}")
try:
found_items = re.findall(r'\$\d+\s+=\s+[0-9a-fx]+\s+"(\S+)=(.+)"\n', out.decode())
except:
log.exception("Unable to decode environment varaibles.")
return None
return dict(found_items)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment