31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
import struct
|
|
|
|
with open('/tmp/amdgpu_installed.ko', 'rb') as f:
|
|
data = f.read()
|
|
|
|
# Check if the old validation values are still present
|
|
old_lea = bytes.fromhex('49f7ffff') # -(2231)
|
|
new_lea = bytes.fromhex('3bf6ffff') # -(2501)
|
|
old_cmp = bytes.fromhex('a6f8ffff') # -(1882)
|
|
new_cmp = bytes.fromhex('98f7ffff') # -(2152)
|
|
orig_lea = bytes.fromhex('2ff8ffff') # -(2001) original
|
|
|
|
print("Checking offsets in INSTALLED module:")
|
|
for offset in [0x330186, 0x33018D, 0x3301F9, 0x3301FE]:
|
|
val = data[offset:offset+4]
|
|
print(f" 0x{offset:x}: {val.hex()}", end="")
|
|
if val == old_lea: print(" <-- OLD lea (2230)")
|
|
elif val == new_lea: print(" <-- NEW lea (2500)")
|
|
elif val == old_cmp: print(" <-- OLD cmp (2230)")
|
|
elif val == new_cmp: print(" <-- NEW cmp (2500)")
|
|
elif val == orig_lea: print(" <-- ORIGINAL lea (2000)")
|
|
else: print(" <-- UNKNOWN")
|
|
|
|
print("\nSearching for old validation pattern (49f7ffff) in module:")
|
|
pos = 0
|
|
while True:
|
|
idx = data.find(old_lea, pos)
|
|
if idx == -1: break
|
|
ctx = data[max(0,idx-8):idx+12].hex()
|
|
print(f" Found at 0x{idx:x}: {ctx}")
|
|
pos = idx + 1 |