Advertisement

在arm中进行栈回溯经验归纳

阅读量:

摘要

在ARM架构下发生段错误时,未能回溯至具体函数,持续查找该问题的根源。而在x86等模式下,相同代码却能够实现回溯功能。针对ARM 32位设备进行测试时,出现了此类现象。

分析

经过多次尝试与探索,最终发现了一些关键性的信息

基础知识概述

此处将阐述栈布局形成的基本原理,相关话题在网络上已有大量讨论,读者可自行查阅资料获取更多信息,此处暂不展开讲解。

重点在于说明两者的差异,x86架构支持回溯操作,而arm架构则不具备此功能,其根本原因在于两种架构对栈结构的组织方式存在差异。在x86模式中,入栈操作遵循严格的顺序规范,寄存器中的数据能够被精确地定位与追踪。

然而,在arm架构中,由于对性能的优化考虑,默认配置下部分与栈相关的寄存器可能并不存在。

具体信息呈现

以下代码作为示例进行展示

复制代码
    static char *p = NULL;
    
    void d() 
    {
    printf("this is d\n");
    }
    
    typedef struct Test
    {
    char s[1024];
    int a;
    } Test;
    
    void c()
    {
    d();
    //    *p = 8;
    Tes

全部评论 (0)

还没有任何评论哟~