【发布时间】:2017-07-25 17:01:32
【问题描述】:
我在使用 arm64 内联汇编从 LKM 中将 64 位地址加载到寄存器时遇到问题。
我正在尝试在内核内存中设置一个函数挂钩。因此,每次调用特定函数时,它都应该分支到我的函数。
我的想法是将地址加载到寄存器中,这是在使用此运行时获得的:
unsigned long address = &hooked_do_undefinstr;
然后编写相应的OPCode
BLR X3
进入记忆。
我尝试将地址加载到寄存器 X3(因为它是 64 位操作系统)
__asm__ __volatile__ ( "MOV x3, %[var]" : [var] "=r" (address));
因为我必须在运行时获取地址,所以我不能使用 LDR 命令。插入模块时出现以下错误:
root@___ :~# insmod mod_init.ko
[ 70.386938] mod_init: Unknown symbol x19 (err 0)
[ 70.391508] mod_init: Unknown symbol x3 (err 0)
使用此命令,我打印 X3 内容时的输出为零:
[ 558.948492] MOV x3 Register value 0x0
我现在的问题是,有没有办法将 64 位地址加载到寄存器中? 或者有没有更好的方法来实现我的函数挂钩以便跳转到我的地址?
问候并感谢您的帮助
【问题讨论】:
标签: assembly hook cpu-registers arm64