使用PTRACE_SINGLESTEP计算进程的机器指令

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指令.

上一篇:linux – 可以ptrace判断x86系统调用是否使用了64位或32位ABI?


下一篇:如何使用ptrace(linux,x86 / x86_64)获得“回溯”(如gdb)