我需要理解和复制(用另一种语言) 跟随功能的逻辑(C代码) 我真的不明白,它在做什么
double __thiscall sub_1(int this) {
return * (double *) (this + 12);
}
它已编译好,但在运行.exe文件时崩溃
我根本不擅长C,也找不到, 这组操作数的实际操作是什么 *(双*) 这不是解引用,因为没有声明指针。
无论如何,任何人都可以告诉我 - 功能的输出
对于sub_1(2)以及为什么?
答案 0 :(得分:3)
要使此代码起作用,int this
必须是包含地址整数值的变量。从该地址开始,必须有一个有效的双重分配,具有12字节的偏移量。代码返回该double的内容。
因此,如果函数被调用为sub_1(0x00000010)
,那么必须在address 0x0000001C
分配一个双变量。如果没有,该程序将调用未定义的行为,并且很可能会崩溃&燃烧。
请注意,使用int
传递地址没有任何意义。更好的选择是double*
,或者至少uint32_t
,它不是有符号整数类型。如果地址太大而无法容纳在int中,则此代码将失败。