LLVM 传递以在特定地址分配内存

LLVM Pass to allocate memory at specific addresses

本文关键字:地址 分配 内存 LLVM      更新时间:2023-10-16

我正在尝试使用 LLVM 传递来转换 C/C++ 程序,以便所有内存分配仅在我决定的某个内存区域中发生。

例如,对于以下代码,我想使用 LLVM 传递在地址 0x10000 处启动所有内存分配:

// Test.cpp
int main()
{
int x = 5;    // I want to allocate memory for this variable
// starting at address 0x10000
int y = 6     // Memory allocated at 0x10004, since it's the second int
return 0;
}

有谁知道这是否可以通过LLVM通行证实现?我已经知道我可以使用 pass 遍历程序中的所有指令以查找所有 alloca 指令,但我不知道如何转换程序以便 alloca 在特定地址分配内存。

您可以使用链接器脚本将某个部分放置在该地址,然后使用 LLVM 传递将相关的全局/静态变量放置在该部分中。

但是,您的问题中的 x 和 y 是 main(( 的本地部分,并且倾向于存在于堆栈上,甚至可能存在于机器寄存器中。你知道,我知道main((不会递归地调用自己,但编译器非常努力地允许递归。在传递中解决这个问题并不简单,因此这些变量可能不容易放入特定部分。