堆栈/框架指针作为外部变量

时间:2018-09-15 18:23:04

标签: c++ c linux assembly

当前,我正在编写一些日志记录逻辑,并希望进行一些缩进。了解是否存在任何函数调用或某些函数是否完成的最简单方法是查看堆栈/帧的当前地址。假设堆栈颠倒了,那么如果log()调用中的堆栈地址较小,则在上一次调用期间,由于存在某些函数调用,我们可以增加缩进量。我知道有backtrace()之类的函数知道如何转储它,或者您可以使用某些程序集,但是,我记得读取了可用于检索此信息的外部变量。有人可以命名这些变量,还是可以在哪里找到它们提供参考(据我所记得,在某些计算机系统书中,如“计算机系统:程序员的观点”)。否则,获取此信息的最方便/最快的方法是什么?

1 个答案:

答案 0 :(得分:3)

此方法高度不可移植,会在各种转换后中断,但如果仅将其用于调试日志记录,则可能是合适的。

获取类似于当前堆栈帧地址的内容的最简单方法是获取任何自动存储(本地,非静态)变量的地址。如果要与基准进行比较,请在main中保存一些局部地址,或将其保存为全局变量。如果您的程序是或可能是多线程的,请在需要时使用线程局部变量。