我正在尝试使用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通过吗?我已经知道我可以使用遍历遍历程序中的所有指令来查找所有alloca指令,但是我不知道如何转换程序,以便alloca将在特定地址分配内存。
答案 0 :(得分:0)
您可以使用linker script在该地址处放置特定部分,然后使用LLVM传递给place the relevant global/static variables at in that section。
但是,问题中的x和y对于main()来说是局部的,并且倾向于存在于堆栈中,甚至可能位于机器寄存器中。您知道,我知道main()不会递归地调用自身,但是编译器确实非常努力地允许递归。与之抗争并不容易,因此这些变量可能不容易放在特定的部分。