2009-08-20 205 views
2

在gcc中使用仪器功能标志,您可以在每次执行某个功能之前和之后测试代码以执行功能。 这些函数是__cyg_profile_func_enter和__cyg_profile_func_exit,带有两个参数,即当前函数的地址;输入的第二个参数是呼叫站点的地址,并用于退出它返回的地址。如何使用__cyg_profile_func_exit获取返回值?

有没有办法获得仪表功能实际返回的值?

+0

这将取决于返回类型......我想知道我是否正确理解你的问题。 – AProgrammer 2009-08-20 18:51:57

+0

你想检索被检测函数返回的值吗?准确地说是 – philant 2009-08-20 19:35:02

+0

。我仪器的功能,我想什么它实际上返回 – LB40 2009-08-20 19:48:36

回答

1

据我所知(为了得到返回值,我决不会引用我的)返回值,使用__cyg_profile_func_exit我们需要将我们的优化标志设置为-O0,iirc,它不适用于度因为-O0将返回值存储在ebx中,并且较高优化标记将返回值存储在eax中;之后致电eip。因此,为了避免ebx被仪表功能所杀,我们在进入功能时保存它,并在我们分开时恢复它。

我希望这会有所帮助,祝你好运。

+0

然后我只看ebx的上下文? – LB40 2009-08-20 20:13:41

+0

是的。在-Ob标志被设置之前,在ebx弹出之前,你应该得到类似于:mov 0xfffffffb(%ebp),%eax。在这里,返回码将eax的内容(我们的返回值)复制到ebx中。简单到足以理解。 – amaterasu 2009-08-20 20:20:13

+0

我不想这么低...废话 – LB40 2009-08-20 21:03:58