复杂 C 表达式的声明

逆向工程 艾达 C 职能
2021-06-25 13:12:44

我使用 IDA Pro 并从生成的 C 文件中得到以下表达式:

v25 = (*(int (**)(void))(v22 + 464))();

我试图通过以下链接找出上述表达式的含义:

http://www.unixwiz.net/techtips/reading-cdecl.html
http://www.codeproject.com/Articles/7042/How-to-interpret-complex-CC-declarations

我开始,(v22 + 464)然后走出括号,向左转到以下*(int (**)(void))

但是,还是看不懂。任何提示?

编辑:我猜这个表达式不是声明而是函数调用。

(v22+464) 然后被转换为一个指针,该指针指向一个函数的指针,该函数将 void 作为参数并返回一个 int。然后该指针被取消引用并应用 () 运算符 - 调用该函数。

1个回答

(*(int (**)(void))(v22 + 464))()是一个函数调用(v22是一个包含函数指针的对象(可能是一个虚表))。