我有一个问题,使用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