需要帮助理解ida伪代码



我是倒车新手。我偶然发现了一行我无法理解的代码。

return (*(_int64(**)(void))(**(_QWORD **)(v1 + 0x3C8) + 0x68LL ))();

代码用于arm64库。所以,我所理解的是,它以无符号int64数据类型的形式返回一个指针。但是,当我尝试将其用作时

return (unsigned long) ((unsigned long)(v1 + 0x3C8) + 0x68) ;

,结果超出了无符号长范围,例如一个结果是19985131375820901。此外,_int64和_QWORD都有8个字节的大小,unsigned long也是如此。所以我有点困惑这是怎么发生的。有人能帮我正确解释一下吗?

v1 + 0x3C8

是的。这将0x3C8添加到v1。但您似乎忽略了在0x68添加到它之前发生的其他事情

(_QWORD **)

该相加的结果被投射到指向_QWORD的指针的指针。这就是它在C++中的含义。

**

并取消引用。两次这会从某个地方产生_QWORD。无论这些指针指向哪里。

+0x68LL

只有到那时,0x68才会被添加到你现在拥有的任何东西中。

但你还没有完成。还有更多的C++代码需要破解。

(_int64(**)(void))

现在,它被投射到一个指针,该指针指向一个不带参数并返回_int64的函数。

*

指针被取消引用。

()

最后进行函数调用,返回一个_int64值。

相关内容

  • 没有找到相关文章

最新更新