From 2eef88f3c98d0df7e06a773cc5601ce0e16fff99 Mon Sep 17 00:00:00 2001 From: xunuwu Date: Sun, 29 Jun 2025 02:06:10 +0200 Subject: [PATCH] init --- .gitignore | 1 + dump.sh | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 .gitignore create mode 100755 dump.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a70e5d2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/*.so diff --git a/dump.sh b/dump.sh new file mode 100755 index 0000000..e1532ec --- /dev/null +++ b/dump.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +set -euo pipefail + +pid="$1" +target_soname="$2" + +echo "pid: $pid" +echo "soname: $target_soname" + +lines=() + +IFS=' +' +for line in $(cat /proc/$pid/maps); do + region=${line%% *} + region_file=/proc/$pid/map_files/$region + if [[ -e $region_file ]]; then + soname=$(objdump -p "$region_file" 2>/dev/null | grep SONAME ||:) + if [[ $(echo "$soname" | awk '{print $2}') == $target_soname ]]; then + lines+=($line) + fi + fi +done + +for line in ${lines[@]}; do + dd if="/proc/$pid/map_files/$(echo "$line" | awk '{print $1}')" seek="$((16#$(echo "$line" | awk '{print $3}')))" of=$target_soname +done