TransWikia.com

IDA HexRays: signed/unsigned types and 32/64 bits dont match assembly

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

One Answer

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP