Skip to content

计算方法如下文

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)

    })
}

alt text

frida中获取got表 let got = m.enumerateSections().find(v=>v.name.startsWith(".got"))

alt text