arm上獲取暫存器的值

2021-08-10 21:07:25 字數 818 閱讀 1517

本來說在arm上獲取暫存器的值是因為需要除錯乙個很古怪的問題,而在自己的機器上測試的386結構的**似乎還不如arm上對register的訪問自由。大致的想了想似乎arm上得到暫存器的值很簡單的樣子。所以之前才說可能在arm上會比較簡單。結果今天上午一試還是當頭一棒,畢竟還是對arm asm不太熟悉的結果,反而是磕磕碰碰的不太順利,不過好歹還是搞清楚了。

其間還一度對arm的設計產生的懷疑,不過最後看來看去還是發現arm asm的功能啊什麼的還是很8錯的,哈哈。

自己做乙個能夠有易於使用的,能夠在arm linux平台上在kernel和user space都可用的監視暫存器值的手段,就出了乙個不算完善的東東,有些東西也是複習複習,也還沒有測試完善,在kernel中使用的話可能還有些需要修改的東西吧。暫時收錄起來:

使用的時候可以把巨集放到乙個標頭檔案裡面就可以直接使用了。現在還有一點不爽的就是還需要乙個特定資料型別的變數作為巨集的引數傳入,如果傳入的資料型別長度小於所位於的平台的位數,就會產生「令人迷惑的結果」。所以使用的時候依賴於不同的平台了。對於arm,傳入的引數的型別最好還是:unsigned long吧。如果定義成u32或者u64等等也行,只要和reg的長度相符合就可以了。

同樣,在編譯的時候加上優化的引數:-o(預設的優化級別似乎就是2,當然禁止優化就用-o0了。哈哈)。

1.如果是為了除錯用的話,加上-g可能會有更好的效果。

2.似乎-finline-functions也是不太令人歡迎的選項。

嗯,大概就是這些吧,如果在kernel中使用的話,可以做成乙個module,或者就是乙個標頭檔案就搞定,等下一階段如果要除錯kernel module的時候有用到再說了。

收工看書去也。

ARM暫存器整理

arm有37個暫存器,31個通用暫存器 r0 r15 32位 和6個狀態暫存器 1.通用暫存器 使用者模式 系統模式 特權模式 中止模式 未定義指令模式 外部中斷模式 快速中斷模式。可分為 未備份暫存器r0 r7 備份暫存器 r8 r14 程式計數器 pc r15 注 r0 r7在所有模式下指的同一...

ARM暫存器介紹

arm微處理器支援7種執行模式,分別為 1.使用者模式 usr arm處理器正常的程式執行狀態 2.快速中斷模式 fiq 用於高速資料傳輸或通道管理 3.外部中斷模式 irq 用於通用的中斷處理 4.管理模式 svc 作業系統使用的保護模式 5.資料訪問終止模式 abt 當資料或指令預取終止時進入該...

arm暫存器別名

apcs,arm 過程呼叫標準 arm procedure call standard 提供了緊湊的編寫例程的一種機制,定義的例程可以與其他例程交織在一起。最顯著的一點是對這些例程來自 沒有明確的限制。它們可以編譯自 c pascal 也可以是用組合語言寫成的。apcs 對我們通常稱為 r0 到 r...