LLVM Pass在特定地址分配内存

时间:2018-10-03 00:47:15

标签: c++ c llvm llvm-ir llvm-c++-api

我正在尝试使用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将在特定地址分配内存。

1 个答案:

答案 0 :(得分:0)

您可以使用linker script在该地址处放置特定部分,然后使用LLVM传递给place the relevant global/static variables at in that section

但是,问题中的x和y对于main()来说是局部的,并且倾向于存在于堆栈中,甚至可能位于机器寄存器中。您知道,我知道main()不会递归地调用自身,但是编译器确实非常努力地允许递归。与之抗争并不容易,因此这些变量可能不容易放在特定的部分。