33 lines
1.2 KiB
Bash
33 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|||
|
|
# Compare loop-mount view vs debugfs view of one "BAD" lib in extra-rootfs.
|
||
|
|
set -uo pipefail
|
||
|
|
IMG="${1:?usage: tmp_dbg_one.sh IMG}"
|
||
|
|
NAME="${2:-libz.so.1.3.2}"
|
||
|
|
OUT=/tmp/deshab-dbgone
|
||
|
|
rm -rf "$OUT"; mkdir -p "$OUT"
|
||
|
|
|
||
|
|
L=$(losetup --find --show --partscan "$IMG")
|
||
|
|
sleep 0.3
|
||
|
|
M=$(mktemp -d)
|
||
|
|
mount -o ro "${L}p1" "$M" || { echo ESP_MOUNT_FAIL; exit 1; }
|
||
|
|
# Copy the extra-rootfs image OFF drvfs first (loop off drvfs is suspect).
|
||
|
|
cp "$M/boot/linux-extra-rootfs.img" "$OUT/extra.img"
|
||
|
|
umount "$M"; rmdir "$M"; losetup -d "$L"
|
||
|
|
|
||
|
|
echo "=== debugfs view (no kernel fs) ==="
|
||
|
|
debugfs -R "dump /usr/lib/$NAME" "$OUT/df.$NAME" "$OUT/extra.img" 2>&1 | tail -2
|
||
|
|
ls -l "$OUT/df.$NAME" 2>/dev/null
|
||
|
|
head -c 64 "$OUT/df.$NAME" 2>/dev/null | od -A d -t x1 | head -5
|
||
|
|
|
||
|
|
echo "=== loop-mount view (kernel ext4) ==="
|
||
|
|
R=$(mktemp -d)
|
||
|
|
if mount -o loop,ro "$OUT/extra.img" "$R"; then
|
||
|
|
ls -l "$R/usr/lib/$NAME"
|
||
|
|
head -c 64 "$R/usr/lib/$NAME" | od -A d -t x1 | head -5
|
||
|
|
md5sum "$R/usr/lib/$NAME" "$OUT/df.$NAME"
|
||
|
|
umount "$R"
|
||
|
|
else
|
||
|
|
echo "loop mount FAILED"
|
||
|
|
fi
|
||
|
|
rmdir "$R"
|
||
|
|
readelf -h "$OUT/df.$NAME" 2>&1 | grep -E 'Class|Type|Entry|program headers|section header size' || echo "readelf failed on debugfs copy"
|