如何将常量放在代码存储器中

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.使用结构对于编译器传递来说太麻烦了,因为它必须修改很多代码.

Eth*_*one 6

你在做什么没有意义,但是:

你可以使用结构吗?

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有错误.

  • 我也在想这样的事情. (2认同)
  • @ user1018562散列很慢?你做得不对. (2认同)