在Linux机器上,我使用带有PTRACE_SINGLESTEP参数的ptrace来计算程序的机器指令数.我跟着这篇文章:http://www.ncsu.edu/it/mirror/ldp/LDP/LGNET/81/sandeep.html.
但是,结果对我来说似乎很奇怪.对于一个非常简单的程序,计算超过95000台机器指令.测试程序是
int main(void) { return 23; }
这里发生了什么?该文章的代码是错误的吗? (我看不出它有什么问题.)
如果没有,是什么导致这样一个简单的程序需要> 95000指令?
解决方法:
您正在编译的C程序链接到C库.它包含程序执行开始的_start符号.此时,C库初始化自己并最终调用main.在main返回之后,控制流回到_start并且还有许多其他指令要执行并返回程序返回值.请注意,连续使用PTRACE_SINGLESTEP不会计算编译指令的数量.它计算执行指令的数量.这意味着在进入main之前,执行main和退出main之后执行95k指令.