This repository has been archived on 2026-08-19. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
ROCm-Research-Archive/patches/patch_all_validation.py
T
2026-08-20 00:45:43 +02:00

73 lines
2.4 KiB
Python

import struct
MODULE = '/tmp/amdgpu_installed.ko'
OUTPUT = '/tmp/amdgpu_v3.ko'
old_lea = bytes.fromhex('49f7ffff') # -(2231) for MAX=2230
new_lea = bytes.fromhex('3bf6ffff') # -(2501) for MAX=2500
old_cmp = bytes.fromhex('a6f8ffff') # -(1882) for range 350-2230
new_cmp = bytes.fromhex('98f7ffff') # -(2152) for range 350-2500
with open(MODULE, 'rb') as f:
data = bytearray(f.read())
print(f'Module size: {len(data)} bytes')
total_patches = 0
# Search ALL occurrences of old_lea and patch nearby old_cmp
pos = 0
while True:
idx = data.find(old_lea, pos)
if idx == -1:
break
ctx = bytes(data[max(0,idx-8):idx+16]).hex()
print(f'\nFound old_lea at 0x{idx:x}: ...{ctx}...')
# Look for matching cmp within 20 bytes
found_cmp = False
for j in range(idx+4, min(idx+30, len(data)-4)):
if data[j:j+4] == old_cmp:
print(f' Found matching cmp at 0x{j:x}')
data[idx:idx+4] = new_lea
data[j:j+4] = new_cmp
print(f' Patched lea: {old_lea.hex()} -> {new_lea.hex()}')
print(f' Patched cmp: {old_cmp.hex()} -> {new_cmp.hex()}')
total_patches += 2
found_cmp = True
break
if not found_cmp:
# Maybe cmp is after more bytes, or uses a different range
# Check wider range and also look for the original cmp value
for j in range(max(0, idx-30), min(idx+60, len(data)-4)):
if j == idx: continue
val = data[j:j+4]
if val == old_cmp:
print(f' Found cmp at 0x{j:x} (wider search)')
data[idx:idx+4] = new_lea
data[j:j+4] = new_cmp
total_patches += 2
found_cmp = True
break
if not found_cmp:
print(f' WARNING: No matching cmp found near 0x{idx:x}')
# Patch just the lea anyway — it might still help
data[idx:idx+4] = new_lea
print(f' Patched lea only: {old_lea.hex()} -> {new_lea.hex()}')
total_patches += 1
pos = idx + 1
# Double check: any remaining old patterns?
remaining_lea = bytes(data).count(old_lea)
remaining_cmp = bytes(data).count(old_cmp)
print(f'\nRemaining old_lea (49f7ffff): {remaining_lea}')
print(f'Remaining old_cmp (a6f8ffff): {remaining_cmp}')
with open(OUTPUT, 'wb') as f:
f.write(data)
print(f'\nTotal patches applied: {total_patches}')
print(f'Output: {OUTPUT}')