2017-03-01 22 views
1

我正在開發一個家庭項目,以瞭解有關嵌入式系統的更多信息。所以我也沒有專業的用C語言:)失敗注入:嘗試寫入受保護的RAM區域

可以說我有一個結構:

static st_struct myStruct; 

的結構定義爲:

typedef struct 
{ 
    int a; 
    long xy; 
} st_struct 

爲了保持代碼的簡潔這裏,該結構被定義並且只在受保護的RAM區域內有效,地址空間從0x04001000 - 0x04003000。 這個受保護的區域阻止其他任務寫入它,它們只能讀取。

如果某個任務/函數試圖修改或寫入該區域,則CPU將重置。

變量myStruct位於地址0x04001f15內。

我想挑起這種嘗試寫入「不允許」的行爲,完全針對myStruct變量。在這個例子中,實現這種失敗注入的最好方法是什麼?你能舉一個例子怎麼用指針算法來做這個嗎?

+1

如果你說結構確實放在該區域,爲什麼不簡單地執行'myStruct.a = 0; myStruct.xy = 0;'? –

+1

我不清楚你如何安排位於保護區內的建築物,但你這樣做似乎是合理的。在這種情況下,按照@AjayBrahmakshatriya的建議,爲其成員分配值應該會導致嘗試寫入該區域。爲了避免這些寫入延遲或優化的可能性,您應該聲明結構爲'volatile'。 –

+0

對不起,我忘了提及struct聲明,只在RAM保護區內有效。所以外面只有從結構讀取是可能的,但不能寫。寫入會導致CPU復位。 – JohnDoe

回答

2

根據我的理解,您希望其他應用程序的代碼如此產生錯誤行爲。

在其他進程/程序做到這一點

typedef struct 
{ 
    int a; 
    long xy; 
} st_struct; 
st_struct *ms = (st_struct*) 0x04001f15; 
ms->a = 0; 
ms->xy = 0; 

這種方式,其他應用程序將嘗試訪問相同的結構,並且將故障。

相關問題