首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要帮助理解ida伪码

需要帮助理解ida伪码
EN

Stack Overflow用户
提问于 2022-08-17 00:58:33
回答 1查看 172关注 0票数 1

我刚开始倒车。我无意中发现了一行我无法理解的代码。

代码语言:javascript
运行
复制
return (*(_int64(**)(void))(**(_QWORD **)(v1 + 0x3C8) + 0x68LL ))();

代码用于arm64库。因此,我所理解的是,它正在以无符号int64数据类型返回一个指针。但是,当我试图用它作为,

代码语言:javascript
运行
复制
return (unsigned long) ((unsigned long)(v1 + 0x3C8) + 0x68) ;

,结果超出了无符号的长范围,例如,一个结果是19985131375820901。而且,_int64和_QWORD都有8个字节的大小,所以没有签名的long也是如此。所以我有点搞不懂这是怎么回事。有谁能帮我正确解释一下这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2022-08-17 01:37:54

代码语言:javascript
运行
复制
v1 + 0x3C8

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

代码语言:javascript
运行
复制
(_QWORD **)

此添加的结果被抛到指向指向_QWORD指针的指针。这就是在C++中的含义。

代码语言:javascript
运行
复制
**

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

代码语言:javascript
运行
复制
+0x68LL

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

但你还没说完呢。还有更多的C++代码需要解开。

代码语言:javascript
运行
复制
(_int64(**)(void))

它现在被转换到指向不接受参数并返回_int64的函数的指针。

代码语言:javascript
运行
复制
*

指针被取消引用。

代码语言:javascript
运行
复制
()

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73381803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档