C51軟復位分析
這樣的語句就完成復位再啟功能了。類型轉(zhuǎn)換符()的優(yōu)先級跟指針運算符*的優(yōu)先級相同,
二者的結合方向是自右至左,所以上述語句就能完成復位功能了。保險起見有些程序員常
常喜歡再加個括號:
#defineK(((void(*)())rst)
(*K)()
或
(*((void(*)())rst))();
由于沒有輸入?yún)?shù),上述復位代碼更嚴謹?shù)膶懛ㄊ牵?BR>
#defineK(((void(*)(void))rst)
(*K)()
或
(*((void(*)(void))rst))();
關于帖子作者的解釋
千萬不要犯“rst”形式的錯誤,對于一維數(shù)組而言,數(shù)組名rst就代表地址。以下二者等
價,更常用的是等式左邊的形式:
rst==rst[0]
整個函數(shù)指針無所謂參數(shù)傳遞,只是把rst當作程序執(zhí)行地址調(diào)用而已,那個學生的解釋也
有問題。
還有一點必須提及,不是說能通過編譯,甚至生成正確代碼,就表示某語句一定是對的。
對很復雜的語句,要考慮到編譯器不嚴格甚至出錯的可能性。
哈佛結構和一個蠕蟲病毒
請注意,定義數(shù)組rst[]時用了關鍵字code,這是C51特有的關鍵字,意味著把數(shù)組定義到
程序空間。標準C是沒有關鍵字code的。
哈佛結構和普林斯頓結構:
哈佛結構——程序空間和存儲空間分開的。C51算是不太嚴格的哈佛結構——雖地址線分
開,但數(shù)據(jù)線沒有分開。DSP是增強的哈佛結構。
PC電腦上奔騰CPU是普林斯頓結構——數(shù)據(jù)空間和程序空間統(tǒng)一編址。
如果數(shù)組rst[]數(shù)據(jù)的匯編機器碼是刪除文件的機器碼,這算不算是病毒?
曾經(jīng)流行過一種蠕蟲病毒,其發(fā)作機理采取的就是將惡意代碼保存成文本文件,然后通過
指針調(diào)用執(zhí)行這個文本,很多殺毒程序也不會查詢文本文件。
程序也罷,數(shù)據(jù)也罷都是二進制形式,如果數(shù)據(jù)空間和程序空間是統(tǒng)一編碼的,數(shù)據(jù)當然
可以當作程序運行。
在這一點上,相對而言,哈佛結構的CPU安全性會好一點點。但嵌入式應用少有病毒,一般
不用關心。
評論