2011-09-28 40 views
0

当您使用ptrace执行单步操作时,该过程执行一行“代码”还是执行一行汇编代替。如果是前一种情况,有没有办法通过一个处理器指令在Linux中执行一个进程?单步执行一个汇编指令的过程

我的意思是在内核中执行此操作,但GDB源代码很大,很难精确跟踪它做什么来执行ASM单步执行。我想单步执行过程中它只是我不知道是什么的ptrace的单步的确切行为(只需1个指令或更多?)

回答

2

它执行一个程序集。您可以通过打开两个会话来验证这一点,在一个会话中,您可以让程序运行,显示IP寄存器的内容(EIP为32位,RIP为64位),并在其他运行objdump中使用以下命令 - objdump -d - j.code |减少并验证

0

用GDB:http://condor.depaul.edu/glancast/373class/docs/gdb.html#Running_the_Program_being_Debugged

如果您有机会获得源代码或调试符号,您可以一次只执行一行。如果你不这样做,你必须一次执行一条指令。

+0

由于某种原因,我的编辑并不坚持我的意思是在Linux内核中执行此操作,我不确定ptrace_request(SINGLESTEP ...)是否能够完全符合我的要求。 –

+0

你是说你打算单步执行内核?或者您希望内核执行一个进程的单步执行? –

+0

我已经知道你可以用KGDB模块单步执行内核。 –