另類方法打造微型可執行檔案

2021-04-29 15:28:41 字數 703 閱讀 3853

該文章原創,**時標明http://blog.csdn.net/sapair/archive/2009/06/16/4273542.aspx

我們知道,用微軟的link鏈結時,允許的指定對齊值最小的是16位元組。一般情況下,這個值很適用,但是在一些對空間有很大要求的情況下,這個對齊值顯然不能滿足要求。比如,自己寫個簡易的作業系統核心檔案,顯然,這個核心檔案對於空間的要求必然是相當的高,寸寸位元組寸寸金啊:)所以,如何盡可能的縮小鏈結後的可執行檔案的尺寸就顯得很重要了。

一般情況下,我們能夠想到的縮小鏈結後的檔案尺寸的方法是用專門的工具進行裁剪,比如linux下的objcopy,但是,這個裁剪的過程比較不方便,而且,裁剪後的檔案是沒有額外資訊頭的直接二進位制檔案,無法在作業系統上面執行,顯然,這樣的方法不太完美。

我們可以採用另一種方法,那就是把link鏈結時的對齊值盡量的小。可是,怎麼盡量的小呢?能小到多少呢?答案當然是1啦,對齊值是1的話就代表不對齊啦:)但有個問題,鏈結的時候不是最小的對齊值是16嗎?我們怎麼改變這個?不著急,且聽我慢慢分解。

其實,link在鏈結的時候會讀取obj檔案的節資訊,這個節資訊裡就包括乙個很重要的內容,那就是對齊值。所以,要改變鏈結的對齊值,我們只要改變obj節頭當中的對齊值就可以了,也就是把對齊值改為1,那麼鏈結的時候的最小對齊值就能達到1啦:)

本來寫了個小工具準備上傳的,但不知道怎麼上傳,沒辦法了。。。

linux 執行可執行檔案

1 首先,需要了解一下a.out這個目標檔案。a.out在linux下是elf executable linkable format 檔案格式,該目標檔案由乙個檔案頭 段 資料段 已初始化 從定位資訊區 符號表及符號名字字串構成,如下左圖所示,經過鏈結後生成執行檔案如下右圖所示,需要說明的是1 bs...

API函式執行可執行檔案

shellexecute hwnd hwnd,父視窗控制代碼 lpcstr lpoperation,操作型別 lpcstr lpfile,要進行操作的檔案或路徑 lpcstr lpparameters,當lpoperation為 explore 時指定要傳遞的引數,通常設為null lpcstr l...

Linux下執行可執行檔案

我們通常會為計算機配置環境變數 path,echo path 檢視當前的環境變數包含的目錄。這些目錄下的可執行檔案就無需輸入完整路徑來執行,直接輸入命令就行,我們shell中常使用的一些linux命令,例如man,cat等的目錄都被包含在該path目錄中,所以直接在shell中輸入這些命令就可以。即...