You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取C++非虚成员函数的机器码内存指针?

获取非虚成员函数的机器码内存指针(Clang/LLVM 64位iOS环境)

假设有如下类定义:

class A
{
  double f(int x);
};

我需要获取指向__TEXT段中A::f成员函数实现字节的void*指针,仅用于查看机器码字节而非调用函数,要求无需调用运行时函数,且在运行时完成字节检查,预期实现逻辑类似如下:

int32_t* bytesOfFunc = (get address of A::f);
int32_t instruction = bytesOfFunc[0];
if(instruction == OP_CODE_1)
{
   // Do something
}

在Clang和LLVM环境下,我找到了一种非跨平台的实现方式,仅适用于64位iOS的Clang/LLVM环境中的非虚成员函数,具体代码如下:

decltype(&A::f) pointerAsArray[1];
pointerAsArray[0] = &A::f;
void* rawPointerBox = pointerAsArray;
void* rawPointer = (void*)((uint64_t*)rawPointerBox)[0];

注意:该方法不具备可移植性,不同编译器对非虚成员函数指针的内部存储结构处理可能存在差异。

内容的提问来源于stack exchange,提问作者Garrigan Stafford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:14:52