You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARMv7安卓原生库中SVC 0xB0指令的作用是什么?

ARMv7中SVC 0xB0指令的用途分析

我正在分析一款Android应用的ARMv7原生库代码,发现了如下代码片段:

LOAD:0000FC20 getOpCode                               ; DATA XREF: LOAD:00000188↑o
LOAD:0000FC20                                         ; LOAD:0003AFA8↓o
LOAD:0000FC20                 LDRSH           R5, [R6,R2]
LOAD:0000FC22                 SVC             0xB0
LOAD:0000FC24                 LDR             R0, [R6,R2]
LOAD:0000FC26                 ADR             R0, unk_10024
LOAD:0000FC28                 PUSH            {R1-R3,R5-R7,LR}
LOAD:0000FC2A                 B               stru_F4A4.r_offset+2

我在网上找不到关于SVC 0xB0的相关信息,想请教该指令的用途是什么?

分析与解答

  • SVC指令的核心作用:SVC(Supervisor Call)是ARM架构中触发特权级操作的指令,执行后会切换到系统模式并跳转到对应的异常处理程序。指令后的立即数(此处为0xB0)是调用标识,处理程序会根据这个编号执行对应逻辑。

  • 0xB0并非标准系统调用号:标准Android/Linux的ARMv7系统调用号范围普遍远小于0xB0(比如常用的open调用号是5、read是3,最高仅几十),因此这个SVC 0xB0大概率是厂商自定义的私有系统调用,或是该原生库自身通过修改异常向量表,实现了用户态的SVC异常处理逻辑。

  • 结合代码上下文的推测:

    • 执行SVC前通过LDRSH R5, [R6,R2]加载半字数据到R5,这应该是在给该调用传递参数
    • SVC执行后再次从[R6,R2]加载数据到R0,说明这个调用会修改该地址指向的内存内容,后续逻辑会基于修改后的结果执行
    • 后续的ADR、寄存器入栈和跳转操作,说明调用完成后会进入特定处理流程,大概率是处理该调用的返回结果
  • 进一步排查方向:

    • 查找该原生库中是否存在修改异常向量表的代码,定位SVC异常的处理入口
    • 如果是定制ROM设备,可分析内核镜像中是否有对应0xB0编号的系统调用实现
    • 通过动态调试,在SVC 0xB0处下断点,观察执行前后寄存器、内存的变化,以及后续代码的执行走向

内容的提问来源于stack exchange,提问作者na29

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:12:44