1

我需要理解和重现(用另一种语言)以下函数(C 代码)的逻辑,但我不太明白,它在做什么

double __thiscall sub_1(int this) {

    return * (double *) (this + 12);

}

它编译正常,但在运行 .exe 文件时崩溃

我对 C 语言一点也不熟练,也无法弄清楚这组操作数在做什么实际操作 * (double *) 这不是取消引用,因为没有声明指针。

无论如何,谁能告诉我 - 函数的输出是什么

对于 sub_1(2),为什么?

4

1 回答 1

3

要使此代码正常工作,int this必须是一个保存地址整数值的变量。从那个地址,必须有一个有效的双分配,有一个 12 字节的偏移量。该代码返回该双精度的内容。

所以如果函数被调用 as sub_1(0x00000010),那么必须有一个 double 变量分配在address 0x0000001C。如果没有,程序会调用未定义的行为,并且很可能会崩溃和烧毁。

int请注意,用于传递地址没有任何意义。更好的选择是double*,或者至少uint32_t不是有符号整数类型。如果地址太大而无法放入 int 中,则此代码将失败。

于 2013-12-12T12:28:31.547 回答