gpt4 book ai didi

android - ARM 上的快速调用(Android NDK)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:04 24 4
gpt4 key购买 nike

IDA(hex-rays.com 的交互式反汇编程序)将原生 C++ 函数(Android NDK、arm)报告为 __fastcall,例如:

// int __fastcall QVariant::toULongLong(_DWORD, _DWORD); weak

顺便说一下,这个函数在文档中声明为

qulonglong QVariant::toULongLong ( bool * ok = 0 ) const

当我使用 __attribute__((fastcall)) 定义 native 函数时,我得到了

warning: 'fastcall' attribute directive ignored [-Wattributes]

问题:我需要调用一个我可以(希望)猜到其原型(prototype)的库函数。我如何声明函数,以便使用正确的调用约定调用它们(即 IDA 报告的 __fastcall)?

最佳答案

IDA 仅将 fastcall 用于任何涉及寄存器的调用约定。对于 ARM,fastcall 基本上意味着“默认调用约定”。

#define __fastcall 添加到源代码应该可以编译它。但是,此功能还有一个问题:

注意 QVariant::toULongLong() 是一个 C++ 方法,所以反编译器显示的第一个参数实际上是隐藏的 this传递给 C++ 类的所有非静态方法的指针。由于反编译器不支持 C++,因此它会将其转换为显式参数。您可能需要撤消此操作才能使其成为有效的 C++ 代码。

或者您可以只使用 the actual source code .

关于android - ARM 上的快速调用(Android NDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23104693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com