inlineHook
- 所谓inlineHook就是直接修改目标函数的头部代码,让它跳转到我们自定义的函数里面,执行我们的代码。从而达到Hook的目的,这种Hook技术一般用在静态语言的Hook上。
inlineHook框架Dobby
- Dobby Github,原名
HookZz
- OC里Runtime用
MethodSwizzle
hook。(数据段) - c系统函数,用
fishhook
可以hook。(数据段) - dobby可以hook静态函数(swift,oc,c都可以),通过一个函数地址(代码段),修改汇编。一个方法汇编的前几行 一般都是对内存栈的操作,开辟内存,堆栈平衡。inlinehook把这几行强行替换掉,跳转到指定的函数内存中。如果不对头进行修改,可能造成寄存器污染,破坏栈平衡。
- 总结:直接修改函数的前几条汇编指令。
origin:
sub sp, sp, #0x10
str wo, [sp, #0xc]
str w1, [sp, #0x8]
new:
# 定位到某一页
adrp x16, 0
add x16, x16, #0xe14
br x16
- ADRP指令(adreess p: page)内存分页
编译时,首先会计算出当前PC到exper的偏移量#offset_to_exper
pc的低12位清零,然后加上偏移量,给register
得到的地址,是含有label的4KB对齐内存区域的base地址;