我想檢測硬件斷點。我能夠讀取使用的寄存器值:在linux上讀取調試寄存器
unsigned sp;
__asm __volatile("movl %%esp, %0" : "=r" (sp));
return sp;
嘗試將64機器我得到Error: unsupported instruction 'mov'
上閱讀dr0
。 我設法用-m32
進行編譯,但是當我嘗試運行時遇到了分段錯誤。
如何檢查調試寄存器?我對32位和64位解決方案都感興趣。
我想檢測硬件斷點。我能夠讀取使用的寄存器值:在linux上讀取調試寄存器
unsigned sp;
__asm __volatile("movl %%esp, %0" : "=r" (sp));
return sp;
嘗試將64機器我得到Error: unsupported instruction 'mov'
上閱讀dr0
。 我設法用-m32
進行編譯,但是當我嘗試運行時遇到了分段錯誤。
如何檢查調試寄存器?我對32位和64位解決方案都感興趣。
你需要在64位模式爲使用64位寄存器,這就是爲什麼它不編譯(大概,因爲你還沒有顯示出您是否嘗試過實際的代碼...)
在任何情況下,你不能在用戶模式下讀取調試寄存器。你應該說爲什麼你需要訪問他們,否則這是一個XY問題。我最好的猜測是你可能對ptrace
API感興趣。
這是爲什麼downvoted?請解釋。 – robert
你被低估了,因爲你沒有向我們展示錯誤的代碼。如果你不告訴我們你做了什麼,我們如何告訴你你做錯了什麼? – fuz
@FUZxxl,錯誤的代碼在上面,只需用dr0替換esp即可。 – robert