计算方法如下文
ts
export function test_xigncode_hook_import(){
on_android_dll_open("libxigncode.so",function(m){
map.update()
//hook("opendir")
//获取got表起始地址 0x788a0 一个条目占用8个字节
let got = m.enumerateSections().find(v=>v.name.startsWith(".got"))
//获取plt表起始地址 0xdaa0 一个条目占用16字节 刚好4条指令
let plt = m.enumerateSections().find(v=>v.name.startsWith(".plt"))
let gotStart = got.address.sub(m.base)
let pltStart = plt.address.sub(m.base)
let method= m.enumerateImports().find(v=>v.name.indexOf("malloc")>=0)
//地址在got表中的位置
let method_got=method.slot.sub(m.base);
//[DATA]
//[GOT]_,_,sub_daa0,memcpy,...
//[PLT]sub_daa0,_,memcpy,...
//got表中的0,1 都是空着的从2才开始有数据
//plt表只空了1位,头部好像都对不上
let index = method_got.sub(gotStart).toUInt32()/8 -1
let method_plt = pltStart.add(index*16)
console.json("模块",m)
console.json("got表",got)
console.json("plt表",plt)
console.log("got起始",gotStart)
console.log("plt起始",pltStart)
console.log("method_got",method_got)
console.log("method_got_index",index)
console.log("method_plt",method_plt)
})
}
frida中获取got表 let got = m.enumerateSections().find(v=>v.name.startsWith(".got"))