IDA HexRays:有符号/无符号类型和 32/64 位不匹配程序集

逆向工程 六线谱
2021-06-24 19:18:38

这是组装:

  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

这是 Hexrays 反编译器的输出

{
      v32[v34] = (double)(LODWORD(v11[v34]) - (int)var1);
      v33[v34] = (double)(int)v10[v34];
      ++v34;
}

问题:v10、v11 和 var1 被声明为 __int64* 和 __int64。任何想法为什么反编译器将它们转换为 32 位整数?我看到那些被转移到 64 位寄存器。这是一个 ELF64 可执行文件

1个回答

很难说没有二进制文件或至少是完整的功能,但可能是因为cvtsi2sd.

根据文档,该指令将输入视为“有符号双字整数”。(双字在 Intel 上是 32 位的)