Reverse Engineering Asked by pete71 on May 6, 2021
Here is assembly:
mov rdi, [r13+rax*8+0]
sub rdi, rcx
cvtsi2sd xmm0, rdi
movsd qword ptr [r11+rax*8], xmm0
cvtsi2sd xmm0, qword ptr [r14+rax*8]
movsd qword ptr [rsi+rax*8], xmm0
add rax, 1
And here is an output from Hexrays decompiler
{
v32[v34] = (double)(LODWORD(v11[v34]) - (int)var1);
v33[v34] = (double)(int)v10[v34];
++v34;
}
issue:
v10, v11 and var1 are declared as __int64* and __int64. Any ideas why decompiler converts them to 32 bit integers? I see those being moved to 64 bit registers. This is an ELF64 executable
Hard to say without the binary or at least the full function but possibly it happens because of cvtsi2sd
.
According to the documentation, the instruction treats the input as “signed doubleword integer”. (Doubleword is 32-bit on Intel)
Answered by Igor Skochinsky on May 6, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP