39 lines
1.2 KiB
Bash
Executable File
39 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Попытка выгрузить библиотеку, загруженную через gdb/dlopen в процессе hl_linux.
|
||
# Для этого ищем путь модуля в /proc/<pid>/maps и вызываем dlclose через gdb.
|
||
|
||
GAME_PID=$(pidof hl_linux | awk '{print $1}')
|
||
if [ -z "$GAME_PID" ]; then
|
||
echo "[-] Ошибка: процесс hl_linux не запущен."
|
||
exit 1
|
||
fi
|
||
|
||
LIB_PATH=$(grep -Eo '/tmp/libahc_rs_[^ ]+\.so|.*/libahc_rs\.so' /proc/$GAME_PID/maps | head -n 1)
|
||
if [ -z "$LIB_PATH" ]; then
|
||
echo "[-] Не удалось найти загруженную библиотеку libahc_rs в процессе $GAME_PID."
|
||
echo " Убедитесь, что вы сначала загрузили библиотеку через load.sh."
|
||
exit 1
|
||
fi
|
||
|
||
GDB_CMD=$(mktemp)
|
||
cat > "$GDB_CMD" <<'EOF'
|
||
attach $GAME_PID
|
||
set $h = (void*)dlopen("$LIB_PATH", 4)
|
||
if $h
|
||
call (int)dlclose($h)
|
||
end
|
||
detach
|
||
quit
|
||
EOF
|
||
|
||
sudo gdb -batch -x "$GDB_CMD"
|
||
RESULT=$?
|
||
rm -f "$GDB_CMD"
|
||
|
||
if [ $RESULT -eq 0 ]; then
|
||
echo "[+] Выгрузка библиотеки завершена."
|
||
else
|
||
echo "[-] Ошибка при выгрузке. Проверьте вывод gdb и права sudo."
|
||
fi
|