新聞中心

        C51軟復位分析

        作者: 時間:2012-07-04 來源:網(wǎng)絡(luò) 收藏


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

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

        (*K)()



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



        由于沒有輸入?yún)?shù),上述復位代碼更嚴謹?shù)膶懛ㄊ牵?BR>
        #defineK(((void(*)(void))rst)

        (*K)()



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

        關(guān)于帖子作者的解釋

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

        rst==rst[0]

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

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

        哈佛結(jié)構(gòu)和一個蠕蟲病毒

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

        哈佛結(jié)構(gòu)和普林斯頓結(jié)構(gòu):

        哈佛結(jié)構(gòu)——程序空間和存儲空間分開的。算是不太嚴格的哈佛結(jié)構(gòu)——雖地址線分
        開,但數(shù)據(jù)線沒有分開。DSP是增強的哈佛結(jié)構(gòu)。

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


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

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

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

        在這一點上,相對而言,哈佛結(jié)構(gòu)的CPU安全性會好一點點。但嵌入式應(yīng)用少有病毒,一般
        不用關(guān)心。


        關(guān)鍵詞: C51 軟復位分析

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 嘉义县| 江门市| 集安市| 马龙县| 建阳市| 武隆县| 林西县| 佛山市| 安平县| 四会市| 昭平县| 思南县| 五家渠市| 左权县| 青冈县| 乌审旗| 射阳县| 朔州市| 香港| 闽清县| 六安市| 青河县| 贵阳市| 太湖县| 库车县| 丘北县| 桦甸市| 清新县| 江源县| 重庆市| 文成县| 广河县| 明溪县| 吉首市| 绿春县| 玛纳斯县| 柏乡县| 修水县| 巨野县| 枣庄市| 剑阁县|