精華區beta Programming 關於我們 聯絡資訊
> ==>發信人: gsj.bbs@bbs.nchu.edu.tw (國王的新衣), 信區: programming > > 但是在電腦的立場, 它根本無從分辨, 只是很單純地依照 IP (Instruction Pointer) > > 解讀 code + data 的最終產物 (op code) 罷了 > 但是程式設計師可以分辨,寫出分別處理的程式讓CPU執行 > > 所以囉, 我們人的思維何必被 code/data 死板的觀念給綁住呢? > Code 可以被當成Data來處理,如OS載入Process的過程 > Data 卻永遠不能當成 Code來處理 這句話太武斷啦 ! 也自相矛盾, code 被當成 data 置入, 而這個 data 放好後也會被當成 code 執行. Von Neumann Machine 根本分 不清那個是 code 那個是 data , Instruction Pointer 指的位址 就是 op-code , op-code 接著就是 operand 也就是放 data 的地 方, 把 data byte 當 op-code byte 處理, 也不外剛好有這個指令 碼, 不然就是 illegle instruction, 而 cpu 對 illegal instruction 不外是當 no-operation 跳過, 就是產生 trap interrupt. 如果是 Virtual Machine Architecture 就會是產生 trap , 就可以再用一段 interpreter program 辨識與解譯那個 illegal instruction , 最終還是把那個看不懂的 byte 當 extended instruction 直接用 routine 模擬出來. > 這是兩者最基本的不同之處,就算是OO也無法突破這點 高階語言幾乎都是限制 programmer 不能這樣用, 但會用 hex byte 寫指令碼的, 就能讓 hex data array 搬到特定位置當 interrupt service routine 的入口來跑程式. 只要這個特定位置是 run-time 才產生的, 任何高階語言的編譯器都是無法事先查出的. 現在的 OOP 實作上都不是真正的防護包莢, 所以也防不了這樣的做法. 應該說 理想的 OOP 規格上比較能防止對 code 或 data 的誤用. -- ◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 140.115.6.234