c++ - LLVM Pass 在特定地址分配内存

标签 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 channel 来实现?我已经知道我可以使用 pass 循环程序中的所有指令来查找所有 alloca 指令,但我不知道如何转换程序以便 alloca 在特定地址分配内存。

最佳答案

您可以使用 linker script将某个部分放置在该地址,然后使用 LLVM 传递到 place the relevant global/static variables at in that section .

但是,您问题中的 x 和 y 是 main() 本地的,并且往往存在于堆栈中,甚至可能存在于机器寄存器中。你知道,我也知道 main() 不会递归地调用自身,但编译器会尽力允许递归。在一个过程中解决这个问题并不简单,因此这些变量可能不容易放在特定的部分中。

关于c++ - LLVM Pass 在特定地址分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52618222/

相关文章:

c++ - 计算热修补/内联函数 Hook 的偏移量

c++ - OpenCV 背景减法/密码本?

c - 如何在异步模式下使用SIGALRM和SIGPOLL?

c++ - 当内部指针偏移量已知时,抑制 valgrind 中的 "possibly lost"错误

c++ - 在什么情况下继承私有(private)成员会有用?

c++ - 如何在 XMLRPC 中处理多个连接深渊服务器 - C++

c - 如何解决 matlab 示例 "fulltosparse.c"的错误

javascript - 将 Python/Boo/Ruby 类语法编译为 C/C++/LLVM/Javascript 的工具(使用 JS ArrayBuffer 提高速度)

llvm - 如何通过网络套接字启动 clangd

objective-c - 为什么具有负值的枚举会导致 Objective-C/C 出现问题?