深度解读Android崩溃日志案例分析1:so崩溃

crash log

bugly上报的日志如下,方便观察我换行整理了下:

通过addr2line/objdump定位函数基址

提示是_Z26lua_cocos2dx_Node_addChildP9lua_State函数的问题,通过addr2line,可以得到0x7577cc对应的地方的确是addChild逻辑

objdump的反汇编中找到addChild的相关调用,注意这里都是基址+偏移,类似if/goto/break/continue反汇编之后会变成这样的反汇编代码

所以我们可以通过左边减右边就是addChild的基址

实际计算也验证了这个逻辑:

7698040=0x757678,就是addChild的基址。

通过ida定位函数基址

这种方式需要我们知道函数的签名,才能定位。

_Z26lua_cocos2dx_Node_addChildP9lua_State这个是编译器对函数的签名。

在ida的Disassemyly窗口中

我们使用jump to address

当然你也可以使用快捷键G打开下边的面板

这里我们输入_Z26lua_cocos2dx_Node_addChildP9lua_State,如果成功,ida会跳转到这个函数定义的位置

注意左侧的地址,ida会详细的展示这个函数的细节信息。

函数基址为0x757678,和我们通过objdump算出来的基址是一致的。

通过偏移精确定位代码位置

看到bugly提示偏移为340

通过手动计算0x757678+0x340=0x7579b8,从objdump的结果中也能看到对应的反汇编代码,执行到str处崩溃的

在ida中更方便,我们可以直接输入

ida会自动跳转到计算后的位置

这两种方式结果是一致的,在ida中按下F5

得到的对应反汇编代码为:

观察反汇编,所以问题应该出在4364行,比addr2line的结果更加精细

c++ 复制代码
template <class T>
bool luaval_to_object(lua_State* L, int lo, const char* type, T** ret, const char* funcName = "")
{
    if(nullptr == L || lua_gettop(L) < lo) // 对应的源码
        return false;

    if (!luaval_is_usertype(L, lo, type, 0))
        return false;

    *ret = static_cast<T*>(tolua_tousertype(L, lo, 0));

    if (nullptr == *ret){
        CCLOG("Warning: %s argument %d is invalid native object(nullptr)", funcName, lo);
        logLuaCallStack(L);
    }

    return true;
}

至此这个问题追查到这里,都是一些非常基础的底层实现,如果还没有答案,那么这个问题多半就不太好解决了,有可能跟多线程有关系,也有可能lua虚拟机出现了异常,不是非常好确定。

相关推荐
摸鱼仙人~11 分钟前
Vue 核心知识体系(大厂秋招方向)
前端·javascript·vue.js
ljt272496066128 分钟前
Vue笔记--状态管理
前端·vue.js·笔记
benbenAItalk9 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
2601_962885729 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
西瓜太郎123410 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
陈随易12 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
水域安全老周12 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
计算机魔术师12 小时前
Anthropic CEO突然喊踩刹车,OpenAI罕见力挺:AI这辆车不能只踩油门了
前端
wing9813 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
EatFan13 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app