pyt*_*nic 2 c c++ linux x86-64 llvm
我需要以常数的形式保存程序中每个函数的一些信息.我想知道是否可以在代码存储器中将函数的常量放在它之前,因此如果通过函数指针调用函数,则可以通过减去函数指针的值来读取该信息.
为了进一步说明,我的代码存储器应如下所示.
ConstantForFunc1
Func1:
....
ConstantForFunc2
Func2:
....
Run Code Online (Sandbox Code Playgroud)
以下是我将如何阅读该信息的示例代码
FuncPointer f = &Func2;
int constantForFunc2 = *((int*)(f - sizeof(int)));
Run Code Online (Sandbox Code Playgroud)
请注意,使用哈希表对于我想要实现的目标来说太慢了,所以我需要一个非常快速的方法.所有这些修改,即插入常量和代码来从中读取,都是通过编译器传递来完成的,我正在编写并修改LLVM IR.使用结构对于编译器传递来说太麻烦了,因为它必须修改很多代码.
你在做什么没有意义,但是:
你可以使用结构吗?
struct example
{
int constantForFunc;
void (*ptrToFunc)();
};
//After declaring, maybe 3, functions
struct example funcList[3] = {{5, &func1}, {10, &func2}, {15, &func3}};
int currentFuncConstant=funcList[1].constantForFunc;
(*funcList[1].ptrToFunc)();
Run Code Online (Sandbox Code Playgroud)
我没有使用函数指针说实话,probaby有错误.