fastcall on arm (Android NDK)
fastcall on arm (Android NDK)
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))
定义本机函数时,我得到
warning: 'fastcall' attribute directive ignored [-Wattributes]
问题:我需要调用一个库函数,我可以(希望)猜测它的原型。如何声明函数,以便使用正确的调用约定(即IDA报告的__fastcall
约定)来调用它们?
IDA
仅将fastcall
用于任何涉及寄存器的调用约定。在ARM的情况下,fastcall基本上意味着"默认调用约定"。
将#define __fastcall
添加到源代码中应该可以编译它。然而,这个函数还有一个额外的问题:
请注意,QVariant::toULongLong()
是一个C++方法,因此反编译器显示的第一个参数实际上是传递给C++类的所有非静态方法的隐藏的this
指针。由于反编译器不支持C++,它将其转换为显式参数。您可能需要撤消此操作以使其成为有效的C++代码。
或者您可以只使用实际的源代码。
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- Android NDK传感器向事件队列报告奇怪的间隔
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 如何在 android ndk 上链接 C 和 C++ 代码,以及 C 和 C++ 运行时库(包括 STL)?
- Android NDK 未定义对ASensorEventQueue_registerSensor的引用
- 如何将 libjpeg-turbo Android NDK 添加为静态库
- 在 Flutter 应用程序中使用 Android NDK 中的 AssetManager 类
- Android NDK - 无法在 Visual Studio 2017 中调试
- 不再支持Android NDK APP_STL gnustl_shared
- 我在 ndk 中构建文件时遇到错误 android.mk
- Android NDK:用于第三方Java库的静态或共享C++运行时
- 为 Android NDK 编译库
- 如何使用 ndk 加载 Android 版 AAudio API
- 如何将 C 库与 Android NDK (Android Studio 2.3.3) 配合使用
- 如何将静态库链接到NDK Android构建中用作本机库的源
- 使用Xamarin的NDK Android应用程序中的DllNotFoundException
- 使用C++ / NDK(Android开发)将文件复制到照片库
- sql语句插入或替换从java到c++ NDK Android