从C代码编译汇编代码而不使用gcc

时间:2016-04-09 14:51:26

标签: c gcc assembly compilation

我正在向程序注入一些控制流监控代码。我得到一个由GCC C编译器生成的汇编代码(flag -S)。然后我在应用程序中的每个间接分支之前在程序集中添加一些监视代码。那些监控代码需要使用一些寄存器,因此,对于每个分支,我都会注入代码,我必须按下并弹出我使用的寄存器,以便保存先前写入的值并在之后返回它们。

然而,由于性能是一个问题,我想知道当我将C代码转换为汇编代码并告诉GCC生成汇编代码而不使用一个或两个特定寄存器时是否可以避免push pops。因此,我可以避免为每个间接分支使用push pops来保存寄存器中的现有值。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

请参阅-ffixed-reg选项。

请注意,如果需要使用相关的寄存器来传递参数等,这将不起作用(事实上,在这种情况下,gcc似乎会默默地使用它)。