首页 > 解决方案 > 从汇编表单中找出命令的数量

问题描述

我有一个 C 文件,我将它转换为汇编形式,我想知道使用 gdb 和汇编文件在主函数上有多少指令。我怎样才能做到这一点?

标签: cassemblygdb

解决方案


在调试器中,键入x/10i main. 这显示了main入口点之后的前十条指令。(您可以根据自己的喜好使用十以外的数字。)寻找返回指令。它可能类似于retretq。如果前十个指令中没有出现,请按回车键。(这会重复/继续上一个命令,显示接下来的十个指令。您还可以键入x/10i从当前位置继续。)当您看到返回指令时,计算来自main它的指令。

您还可以使用 GCC 的-S开关编译为程序集。这将生成一个包含程序集源的文件,foo.s如果您的源文件名为foo.c. 然后您可以在文本编辑器中查看它以计算从main:标签到返回的指令。(这个文件可能包含各种其他信息——没有指令的标签、编译器为信息/调试目的插入的注释、不是指令的特殊汇编器指令等等,所以如果你在其中计算指令可能会很困难不熟悉哪些东西是指令,哪些不是。调试器可能更容易用于此任务,因为它显示原始指令。)

从技术上讲,C 中的函数不一定编译为一组简单的顺序指令。编译器可以将来自被调用函数的代码嵌入到调用函数中。从理论上讲,它可以将一个函数的指令放在多个不同的地方(尽管根据我的经验,编译器往往不会这样做),并在它们之间进行跳转。因此,计数指令通常仅用于简单的课堂练习和学习探索。


推荐阅读