【问题标题】:Map all returns of virtual functions to their corresponding return addresses将虚函数的所有返回映射到它们对应的返回地址
【发布时间】:2017-01-18 11:34:37
【问题描述】:

基本上我想通过添加运行时检查来做调用者/被调用者映射 在每个 C/C++ 返回之前检查允许的范围是 执行。

我有一个所有虚拟对象调度的正向映射到 给定类层次结构允许的虚拟表条目。 此数据是在 LLVM LTO 期间收集的。现在我想为 所有虚函数都返回。由于前向映射告诉 我需要按顺序确定哪些功能应该可以访问 精确地向后映射以下信息。

  1. 从 Clang/LLVM 中的何处获取每个的返回地址 return 包含在一个虚函数中。是否可以获得 编译期间的这些信息?

  2. 如何确定某个返回值包含在哪个函数中。 接下来如何判断该函数属于哪个类?

提前致谢, 保罗

【问题讨论】:

标签: c++ clang llvm lto


【解决方案1】:

是的,EJP,你是对的,返回地址在运行时被压入堆栈,但每次返回都应该返回到用于调用相应函数的调用指令旁边的地址,所以我在想,因为每次返回必须在 call 指令之后继续执行(在 call 指令之后)应该是一个在编译时可以获得的地址。

如果以上不成立,那么编译器在每个调用指令之后生成所需信息的指令呢?

期待对我的帖子有一个合格的准确答案。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多