当前位置:嗨网首页>书籍在线阅读

20-获取函数的返回地址

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

获取函数的返回地址

GCC提供了一个关键字,可以获取当前函数的返回值,或者当前函数的某个调用:

615.png 参数level指定调用链中的返回值函数。如果level值为0,表示返回当前函数的地址,如果level值为1,表示返回当前函数的调用方地址,如果level值为2,表示该函数调用方的返回地址等等。

如果当前函数是个内联函数,返回的地址是调用函数的地址。如果不想使用这种方式,就使用关键字noinline(在本附录前面“避免内联”一节中提到),强制编译器不要对函数进行内联。

关键字__builtin_return_address有几个用途。一种是出于调试或信息目的,另一种是展开调用链,实现代码自检、导出代码崩溃信息、调试器等等。

注意,有些体系结构只能返回调用函数的地址。在这种体系结构上,非0参数值会生成随机返回值。因此,除了0之外的任何值都是不可移植的,只能用于调试目的。