據我所知(我可能是錯的),沒有辦法只在一個x86-64系統上執行一個指令。也許相反,你可以執行指令後跟着'ud2'操作碼來觸發一個信號 - 但是你必須擔心指令修改控制流並去其他地方。然而,如果我理解正確,ptrace()系統調用有一個SINGLESTEP選項,它將只執行一條指令。這是如何實施的?我無法想象內核具有某種反彙編器來識別關於它的指令和原因。那麼,是否有某種使用我不知道的架構特徵?或者完全不同的東西?PTRACE_SINGLESTEP如何實現?
1
A
回答
5
是的,有一個建築單步標誌。從內核返回到用戶空間使內核有機會同時設置RIP/RFLAGS,因此它可以爲用戶空間設置單步而不用在內核指令上觸發。
由於某種原因,Trap Flag有它自己的維基百科文章!另見wikipedia's EFLAGS article。
請參閱x86標記wiki,以鏈接到英特爾架構手冊,其中記錄了所有這些內容。
也許不是你可以執行該指令其次是「ud2的」操作碼觸發信號
然後你需要代碼,以確定解碼的x86指令長度。你不會使用ud2
,你會使用int3
which exists for this purpose.
IIRC,也有調試寄存器,可以設置硬件斷點而不修改代碼。
相關問題
- 1. ptrace(PTRACE_SINGLESTEP)+ waitpid = SIGCHLD
- 2. 在Linux機器上使用PTRACE_SINGLESTEP
- 3. 如何實現
- 4. 如何在Delphi中實現XIRR實現?
- 5. 如何實現與實體
- 6. 如何實現Tesseract.Xamarin?
- 7. 如何實現IXunitTestCollectionFactory
- 8. 如何實現validateToolbarItem(_ :)?
- 9. 如何實現FlowExecutionExceptionHandler
- 10. 如何實現SOAP?
- 11. 如何實現`prepareForReuse`?
- 12. 如何實現glob.glob
- 13. jQuery如何實現[]
- 14. 如何實現documentlistener
- 15. 如何實現GKTurnBasedMatchOutcomeCustomRange?
- 16. ImageScaleToFit - 如何實現?
- 17. 如何實現IAsyncOperationWithProgress
- 18. 如何實現setOnItemClickListener?
- 19. updateInteractiveTransition如何實現?
- 20. 如何實現saveFragmentInstanceState?
- 21. 如何實現highchart
- 22. 如何實現zmsg_recv_nowait?
- 23. 如何實現SSAS
- 24. 如何實現Excutors
- 25. \ b如何實現?
- 26. 如何實現NavigationDrawer
- 27. 如何實現PHPUnit
- 28. __RTC_CheckEsp如何實現?
- 29. 如何實現getchar()?
- 30. 如何實現viewpager
我不是最新的,但是陷阱旗(TF)不再是一個東西? – NPE
不,我只是不知道! – bchurchill