複製鏈接
請複製以下鏈接發送給好友

可執行代碼

鎖定
目標代碼(object code)指計算機科學中編譯器或彙編器處理源代碼後所生成的代碼,它一般由機器代碼或接近於機器語言的代碼組成。 [1]  在計算機科學中,可執行代碼(Executable Code)是指將目標代碼連接後形成的代碼,簡單來説是機器能夠直接執行的代碼。可執行代碼一般是可執行文件的一部分。
中文名
可執行代碼
外文名
Executable Code
學    科
計算機科學
定    義
目標代碼連接後形成的代碼
有關術語
可執行文件
應    用
軟件程序、內存泄露檢查

可執行代碼簡介

可執行代碼(Executable Code)是指將目標代碼連接後形成的代碼,簡單來説是機器能夠直接執行的代碼,可執行代碼當然也是二進制的。源代碼(也稱源程序)是指未編譯的按照一定的程序設計語言規範書寫的文本文件,是一系列人類可讀的計算機語言指令。 在計算機程序設計中,一般建議將源代碼與可執行代碼分離存儲。問題在於不同平台下編譯出來的可執行代碼是不同的,例如一個程序複製到不同的電腦上,即便代碼不做任何修改,VI也會被修改,因為VI中包含的可執行代碼變了。理論上,可執行代碼與源代碼分離開來,可以提高程序的加載速度:程序可以各取所需,只加載源代碼或只加載可執行代碼。

可執行代碼可執行文件與可執行程序

可執行文件 (executable file) 指的是可以由操作系統進行加載執行的文件。在不同的操作系統環境下,可執行程序的呈現方式不一樣。通常可執行文件內,含有以二進制編碼的微處理器指令,也因此可執行文件有時稱為二進制檔。這些二進制微處理器指令的編碼,於各種微處理器有所不同,故此可執行文件多數要分開不同的微處理版本。一個電腦文件是否為可執行文件,主要由操作系統的傳統決定。例如根據特定的命名方法(如擴展名為exe)或文件的元數據信息(例如UNIX系統設置“可運行”權限)。在現代的各種電腦架構,可執行文件除了有程序的信息之外,還有其他信息,例如讓程序運行的操作系統設置值數據、調試數據等等。
可執行程序(executable program,EXE File)是指一種可在操作系統存儲空間中浮動定位的可執行程序。在MS-DOS和MS-WINDOWS下,此類文件擴展名為·exe。
WINDOWS操作系統中的二進制可執行文件,分兩種:
一種後輟名為·com,另一種是·exe 。
DOS規定,有重名的exe和com,運行時優先執行com文件。如果只有A.exe,就可以直接輸入A,而不用輸入全名。但如果有A.com和A.exe,輸入A則優先執行A.com,要運行A.exe只能輸入A.exe而不能輸入A。一般用於DOS,在WINDOWS系統中的執行文件一般都是.exe文件。在 MS-DOS 中,用以標識可執行文件的文件擴展名。用户在提示行輸入不帶 .exe 擴展名的文件名後按 Enter 鍵或者點雙擊就能運行可執行程序。

可執行代碼ECMA的可執行代碼類型

一共有三種 ECMA 腳本可執行代碼:
全局代碼是指被作為 ECMAScript Program 處理的源代碼文本。一個特定 Program 的全局代碼不包括作為 FunctionBody 被解析的源代碼文本。
Eval 代碼是指提供給 eval 內置函數的源代碼文本。更精確地説,如果傳遞給 eval 內置函數的參數為一個字符串,該字符串將被作為 ECMA 腳本 Program 進行處理。在特定的一次對 eval 的調用過程中,eval 代碼作為該 Program 的全局代碼部分。
函數代碼是指作為 FunctionBody 被解析的源代碼文本。一個 FunctionBody 的函數代碼不包括作為其嵌套函數的 FunctionBody 被解析的源代碼文本。函數代碼同時還特指以構造器方式調用 Function 內置對象時所提供的源代碼文本。更精確地説,調用 Function 構造器時傳遞的最後一個參數將被轉換為字符串並作為 FunctionBody 使用。如果調用 Function 構造器時,傳遞了一個以上的參數,除最後一個參數以外的其他參數都將轉換為字符串,並以逗號作為分隔符連接在一起成為一個字符串,該字符串被解析為 FormalParameterList 供由最後一個參數定義的 FunctionBody 使用。初始化 Function 對象時所提供的函數代碼,並不包括作為其嵌套函數的 FunctionBody 被解析的源代碼文本。
嚴格模式下的代碼
一個 ECMA 腳本程序的語法單元可以使用非嚴格或嚴格模式下的語法及語義進行處理。當使用嚴格模式進行處理時,以上三種代碼將被稱為嚴格全局代碼、嚴格 eval 代碼和嚴格函數代碼。當符合以下條件時,代碼將被解析為嚴格模式下的代碼:
當全局代碼以指令序言開始,且該指令序言包含一個使用嚴格模式指令時,即為嚴格全局代碼。
當 Eval 代碼以指令序言開始,且該指令序言包含一個使用嚴格模式指令時;或者在嚴格模式下的代碼中通過直接調用 eval 函數時,即為嚴格 eval 代碼。
當一個 FunctionDeclaration、FunctionExpression 或 PropertyAssignment 訪問器處在一段嚴格模式下的代碼中,或其函數代碼以指令序言開始,且該指令序言包含一個使用嚴格模式的指令序言時,該函數代碼即為嚴格函數代碼。
當調用內置的 Function 構造器時,如果最後一個參數所表達的字符串在作為 FunctionBody 處理時以指令序言開始,且該指令序言包含一個使用嚴格模式的指令,則該函數代碼即為嚴格函數代碼。

可執行代碼基於可執行代碼的緩衝區溢出檢測模型

緩衝區是程序為存儲數據而分配的連續的具有一定長度的內存空間。而緩衝區溢出是指,寫入緩衝區的數據長度大於緩衝區分配的長度,使得數據寫到相鄰的內存中而覆蓋掉其中已有的數據。若覆蓋掉的數據恰好是程序的入口,那麼程序將會跳轉到寫入的數據指定的地址去執行。攻擊者通過精心構造填充數據,可以使程序跳轉到指定的代碼處執行,從而進行非法操作。
當前緩衝區溢出檢測技術主要分為 2 類:靜態檢測和動態檢測。
靜態檢測主要是通過對源代碼的審查和分析來發現緩衝區溢出漏洞。由於不需要運行程序,因此,檢測效率較高,代價較小;缺點是大都依賴於源代碼且有較高的誤報率和漏報率。
動態檢測技術是在程序的運行過程中,通過監測程序的運行狀態來檢測是否發生了緩衝區溢出。該類技術可以通過模糊測試 (fuzz testing) 主動誘發, 也可以通過修改軟硬件平台被動監測 ,以發現漏洞。前者的優點是誤報率低;缺點是測試充分性無法保證,可能有較高的漏報率。後者的優點是漏報率低;缺點是代價大,且大都無法防禦拒絕服務攻擊
根據緩衝區溢出原理,提出一種基於可執行代碼的緩衝區溢出檢測模型,給出該模型的理論基礎,描述模型構建的過程,提出新的緩衝區引用實例的識別方法。 該模型將可執行代碼反彙編為彙編代碼, 建立函數調用關係圖和控制流圖, 分析緩衝區變量及其引用實例,從緩衝區引用實例逆程序流方向歸結路徑約束,通過約束求解判斷緩衝區溢出可能與否。 [2] 
參考資料