当您使用ptrace执行单步操作时,该过程会执行一行“代码”或者执行一行汇编。如果是前一种情况,是否有办法仅通过一个处理器指令在linux中执行一个进程?
我的意思是在内核中执行此操作,但GDB源代码很大,并且很难准确跟踪它正在做什么来进行ASM单步执行。我想单步执行一个过程只是因为我不确定ptrace单步的确切行为是什么(只需1条指令或更多?)
答案 0 :(得分:2)
它做了一行装配。您可以通过打开两个会话来验证这一点,在一个会话中,您可以让程序运行,显示IP寄存器的内容(EIP在32位,RIP在64位),在其他运行objdump中使用以下命令 - objdump -d - j.code |少并验证
答案 1 :(得分:0)
使用gdb:http://condor.depaul.edu/glancast/373class/docs/gdb.html#Running_the_Program_being_Debugged
如果您有权访问源代码或调试符号,则可以一次单步执行一行。如果不这样做,则必须一次执行一条指令。