180104 逆向-DebugMe(3)&ARM调用约定

本文介绍了ARM汇编中的调用约定,其中R0-R3寄存器用于传递前4个参数,返回值存储在R0。在DebugMe函数的分析中发现不遵循此约定的行为,导致IDA解析错误。通过对函数的深入分析,揭示了参数传递和返回值计算的过程,特别是sub_E14函数实现了整除操作。在函数调用结束后,堆栈中的参数保持原值,而R0仅保留整除的商。明日计划包括比赛和阅读。
摘要由CSDN通过智能技术生成

1625-5 王子昂 总结《2018年1月4日》 【连续第461天总结】
A. ARM调用约定
B.

ARM汇编中规定:R0-R3这4个寄存器用来传递函数调用的第1到第4个参数,超出的参数通过堆栈来传递。R0寄存器同时用来存放函数调用的返回值。被调用的函数在返回前无需恢复这些寄存器的内容。

知道这一点就可以回头去搞DebugMe那里IDA解析错误的函数了

先回忆一下该函数:
这里写图片描述
可以看到v10是不明来由的,事实上是因为在汇编状态下,返回值理应由r0传递
但是在(又调用了一个子函数,只是包装的)sub_EAC中,调用完子函数后将R0赋值给了r1,使得在外部将r1赋给v3(即r7)时IDA不知道r1是哪来的
这是一个不符合调用约定的行为

那么分析ARM汇编

.text:00000D44                 MULS    R0, R3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值