新聞中心

C51軟復位分析

作者: 時間:2012-07-04 來源:網絡 收藏


這樣的語句就完成復位再啟功能了。類型轉換符()的優(yōu)先級跟指針運算符*的優(yōu)先級相同,
二者的結合方向是自右至左,所以上述語句就能完成復位功能了。保險起見有些程序員常
常喜歡再加個括號:

#defineK(((void(*)())rst)

(*K)()



(*((void(*)())rst))();



由于沒有輸入參數,上述復位代碼更嚴謹的寫法是:

#defineK(((void(*)(void))rst)

(*K)()



(*((void(*)(void))rst))();

關于帖子作者的解釋

千萬不要犯“rst”形式的錯誤,對于一維數組而言,數組名rst就代表地址。以下二者等
價,更常用的是等式左邊的形式:

rst==rst[0]

整個函數指針無所謂參數傳遞,只是把rst當作程序執(zhí)行地址調用而已,那個學生的解釋也
有問題。

還有一點必須提及,不是說能通過編譯,甚至生成正確代碼,就表示某語句一定是對的。
對很復雜的語句,要考慮到編譯器不嚴格甚至出錯的可能性。

哈佛結構和一個蠕蟲病毒

請注意,定義數組rst[]時用了關鍵字code,這是特有的關鍵字,意味著把數組定義到
程序空間。標準C是沒有關鍵字code的。

哈佛結構和普林斯頓結構:

哈佛結構——程序空間和存儲空間分開的。算是不太嚴格的哈佛結構——雖地址線分
開,但數據線沒有分開。DSP是增強的哈佛結構。

PC電腦上奔騰CPU是普林斯頓結構——數據空間和程序空間統(tǒng)一編址。


如果數組rst[]數據的匯編機器碼是刪除文件的機器碼,這算不算是病毒?

曾經流行過一種蠕蟲病毒,其發(fā)作機理采取的就是將惡意代碼保存成文本文件,然后通過
指針調用執(zhí)行這個文本,很多殺毒程序也不會查詢文本文件。

程序也罷,數據也罷都是二進制形式,如果數據空間和程序空間是統(tǒng)一編碼的,數據當然
可以當作程序運行。

在這一點上,相對而言,哈佛結構的CPU安全性會好一點點。但嵌入式應用少有病毒,一般
不用關心。


關鍵詞: C51 軟復位分析

評論


相關推薦

技術專區(qū)

關閉