【问题标题】:Hex-Rays decompiles array to intHex-Rays 将数组反编译为 int
【发布时间】:2016-01-26 23:32:25
【问题描述】:

我使用 Hex-Ray 反编译了一个 dll,但它将 dll 的数组类型输入参数反编译为 int。知道如何处理吗??

double dzSell(int a1, double a2, int a3, int a4, int a5)

int a1是dll中的数组类型

【问题讨论】:

  • a1 不是数组。我知道这是因为你不能在 C 中将数组作为参数。
  • 我的意思是在 dll 中是 *double 而在伪代码中是 int a1
  • 你知道反编译器很不完善吧?

标签: c++ arrays dll decompiling


【解决方案1】:

这里是 Hex-Rays 如何反编译指针的示例

/* The computational routine */
extern "C" __declspec(dllexport) void myfun2 (double x, double *y, double *z, int n)
{
    int i;
    /* multiply each element y by x */
    for (i=0; i<n; i++) {
        z[i] = x * y[i];
    }
}


/*
int __cdecl myfun2(double a1, int a2, int a3, int a4)
{
  int result; // eax@3
  int i; // [sp+0h] [bp-4h]@1

  for ( i = 0; i < a4; ++i )
  {
    *(double *)(a3 + 8 * i) = a1 * *(double *)(a2 + 8 * i);
    result = i + 1;
  }
  return result;
}
*/

很明显,指针变量被转换为int,这意味着必须进行强制转换double * -> int,因为a2和a3用于访问数组。为了正确转换,我使用了 (uintptr_t)buffer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2020-04-15
    • 2012-06-01
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多