-1

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

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

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

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

在此先感谢,保罗

4

1 回答 1

0

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

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

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

于 2017-01-19T13:31:02.637 回答