我有一個問題,使用arm64內聯彙編從一個LKM中加載64位地址到寄存器。ARM64-彙編分支到函數地址
我想在內核內存中設置一個函數鉤子。所以每次調用某個特定的函數時,都應該分支到我的函數中。
我的想法是一個地址加載到寄存器中,這是在使用該運行獲得:
unsigned long address = &hooked_do_undefinstr;
然後寫的
BLR X3
相應的操作碼到存儲器中。
我想因爲我有運行時獲得的地址與
__asm__ __volatile__ ("MOV x3, %[var]" : [var] "=r" (address));
加載地址到寄存器X3(因爲它的64位操作系統),我不能使用LDR命令。當我打印的X3含量爲零
[email protected]___ :~# insmod mod_init.ko
[ 70.386938] mod_init: Unknown symbol x19 (err 0)
[ 70.391508] mod_init: Unknown symbol x3 (err 0)
使用此命令,輸出:插入模塊時,我收到以下錯誤
[ 558.948492] MOV x3 Register value 0x0
現在是我的問題,是有辦法來加載一個64位地址註冊到一個寄存器? 或者是否有一個更好的方法來實現我的功能掛鉤,以跳轉到我的地址?
問候,並感謝您的幫助
謝謝您的回答。我沒有想到,寄存器可能會被覆蓋。 我已經禁用了內存寫保護併爲我正在覆蓋的代碼創建了一個備份。此外,我必須將您的十六進制代碼轉換爲小端。 你的代碼,我將不得不保存(從原始條目)8Byte的兩個命令加上8字節的地址權? 但我正在嘗試這個。再次感謝 – MajorasKid
編輯:我只是檢查,看到你的OPCode已經在little endian – MajorasKid