#!/bin/bash # guest_words.sh - print "VA PA" for the +0x80 word of every 16 KB rw-s # /dev/nvidiactl mapping of the vk_frame client (pagemap PFN -> PA). PID=$(pgrep -x vk_frame | head -1) [ -z "$PID" ] && exit 0 sudo grep -E 'rw-s' /proc/$PID/maps | grep nvidiactl | while read -r line; do RNG=$(echo "$line" | awk '{print $1}') LO=${RNG%-*}; HI=${RNG#*-} SZ=$((0x$HI - 0x$LO)) [ "$SZ" -ne 16384 ] && continue VP=$(( (0x$LO + 0x80) / 4096 )) ENT=$(sudo dd if=/proc/$PID/pagemap bs=8 skip=$VP count=1 2>/dev/null | xxd -e -g8 | awk '{print $2}') [ -z "$ENT" ] && continue PFN=$(( 0x$ENT & 0x7fffffffffffff )) PA=$(( PFN * 4096 + 0x80 )) echo "0x$LO 0x$(printf %x $PA)" done