如何获取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
相关产品推荐
相关产品推荐

