PAGalaxyLab / YAHFA

Yet Another Hook Framework for ART
GNU General Public License v3.0
1.56k stars 350 forks source link

新版本hook问题!原方法运行多次后才能hook能成功! #139

Open pony5551 opened 3 years ago

pony5551 commented 3 years ago

新版不是不能hook,遥是一开始不能hook!

在运行hook后再运行 Log.e(TAG, "call Log.e()");

刚开始几百次是hook不了的,要多点几次能才hook,我看了一下大概运行550次

Log.e(TAG, "call Log.e()");才会被hook!

android10 pxile3

pony5551 commented 3 years ago

android9也一样有问题

android8正常

pony5551 commented 3 years ago

初步分析了一下,

问题代码在这里

if (newEntrypoint) {
    writeAddr((char *) fromMethod + OFFSET_entry_point_from_quick_compiled_code_in_ArtMethod,
            newEntrypoint);
} else {
    LOGE("failed to allocate space for trampoline of target method");
    return 1;
}

if (OFFSET_entry_point_from_interpreter_in_ArtMethod != 0) {
    void *interpEntrypoint = readAddr((char *) toMethod + OFFSET_entry_point_from_interpreter_in_ArtMethod);
    writeAddr((char *) fromMethod + OFFSET_entry_point_from_interpreter_in_ArtMethod,
            interpEntrypoint);
}
rk700 commented 3 years ago

entry更新没有生效?

x86模拟器是否会出现同样的问题?

pony5551 commented 3 years ago

x86没测试,不过我好几个机器都有问题,就应该是有问题吧!