WinCE Floating-Point operators - HELP
Hi All,
A have a function in Windows CE with some floating point calculations over an elapsed seconds value. Unfortunatally I don't understand the second part of this function. So I would like to ask your help to decode it. This is the fcuntion in IDA:
Code:
dert:00001638 sub_1638
dert:00001638 ; DATA XREF: dert:00006008↓o
dert:00001638 STMFD SP!, {R4,LR}
dert:0000163C MOV R0, #0
dert:00001640 BL getElapsedSeconds ; Get elapsed time in seconds
dert:00001644 LDR R3, =_i64tos
dert:00001648 LDR R3, [R3]
dert:0000164C MOV LR, PC
dert:00001650 BX R3 ; _i64tos(secs) //convert eleapsed secs to Single Precision float
dert:00001654 LDR R3, =_divs
dert:00001658 LDR R1, =2592000.0 ; 30 days in seconds
dert:0000165C LDR R3, [R3]
dert:00001660 MOV LR, PC
dert:00001664 BX R3 ; _divs(secs/30 days)
dert:00001668 LDR R3, =_stod
dert:0000166C LDR R3, [R3]
dert:00001670 MOV LR, PC
dert:00001674 BX R3 ; Convert the result tp Double precision float
dert:00001678 LDR LR, =_subd
dert:0000167C LDR R2, =0xEB851EB8 ; Not used (float: -3.2186e26)
dert:00001680 LDR R3, =0x3FDEB851 ; Not used (1.74)
dert:00001684 LDR R4, [LR]
dert:00001688 MOV LR, PC ; subd => Double precision substraction, what are the operands?
dert:0000168C BX R4
dert:00001690 LDR R3, =_dtoi
dert:00001694 LDR R3, [R3]
dert:00001698 MOV LR, PC
dert:0000169C BX R3 ; _dtoi() Convert double back to int
dert:000016A0 LDMFD SP!, {R4,LR}
dert:000016A4 BX LR ; return
So there is 2 note used constants, and on double precision substarction where I don't know the second operand (the first must be the return valus of _divs(secs/30 days)).
The C code generated by Hex-ray is the following:
Code:
int sub_1638()
{
signed int v0; // r0
int v1; // r0
int v2; // r0
int v3; // r0
int v4; // r0
v0 = getElapsedSeconds(0);
v1 = i64tos(v0);
v2 = divs(v1, 0x4A1E3400);
v3 = stod(v2);
v4 = subd(v3);
return dtoi(v4);
}
Hex-Ray decode the substraction with only 1 operand. It's incorrect becasue it's need 2 arguments:
https://msdn.microsoft.com/en-us/lib...edded.70).aspx
So everybody can help me to decode the floating point operations over the elapsed seconds?
Thanks and regards,
leader
|