最近在学怎么看反汇编代码,
用objdump出来了一段代码,:
005e060 <StartStopwatch>:
5e060: e92d4030 push {r4, r5, lr}
5e064: e24dd00c sub sp, sp, #12 ; 0xc
5e068: e3a00001 mov r0, #1 ; 0x1
5e06c: e1a0100d mov r1, sp
5e070: ebfee91a bl 184e0 <clock_gettime>
5e074: e59d3000 ldr r3, [sp]
5e078: e30b2589 movw r2, #46473 ; 0xb589
5e07c: e34124f8 movt r2, #5368 ; 0x14f8
5e080: e59dc004 ldr ip, [sp, #4]
5e084: e30816a0 movw r1, #34464 ; 0x86a0
5e088: e0c40392 smull r0, r4, r2, r3
5e08c: e1a00fc3 asr r0, r3, #31
5e090: e0c25c92 smull r5, r2, r2, ip
5e094: e3401001 movt r1, #1 ; 0x1
5e098: e1a0cfcc asr ip, ip, #31
5e09c: e06006c4 rsb r0, r0, r4, asr #13
5e0a0: e0633091 mls r3, r1, r0, r3
5e0a4: e06c26c2 rsb r2, ip, r2, asr #13 //这个右移13位又是什么意思?
5e0a8: e3020710 movw r0, #10000 ; 0x2710
5e0ac: e0202390 mla r0, r0, r3, r2
5e0b0: e28dd00c add sp, sp, #12 ; 0xc
5e0b4: e8bd8030 pop {r4, r5, pc}
我尝试将这段转换成C语言:
long startstopwatch(){
struct timespec now;
clock_gettime(0x01, now);
R3 = now.tv_sec;
R2 = 0x14f8b589;
R12 = now.tv_nsec;
R1 = 0x86a0;
(R4, R0) = 0x14f8b589 * now.tv_sec;//0x14f8b589 这个数字是干什么的?
R0 = R3 >> 31; // 0xffffffff or 0x00
(R2, R5) = 0x14f8b589 * now.tv_nsec;
R1 = R1 + 0x00010000;// 0x186a0 = 100000
R12 = R12 >> 31; // 0xffffffff or 0x00
R0 = (R4 >> 13) - R0;
R3 = R3 - R0 * R1;
R2 = (R2 >> 13) - R12;
R0 = 10000;
R0 = R3 + R0 * R3;
return R0;
}
感觉像是在获取一个时间点,但研究了好久还是看不懂具体是做什么,麻烦帮忙看看,小弟先谢了,
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法