2016-12-31 91 views
2

要執行實驗,我想修改OpenWRT項目的彙編代碼(通過在常規有意義的代碼之間插入NOP)。 我需要通過在第一次運行時使用gcc的-S標誌進行編譯來創建程序集文件(.s文件),執行修改程序集文件的shell腳本並在第三步中調用鏈接程序來創建可執行的二進制文件。除了第2步之外,是否有辦法通過適當的make文件修改/配置完成步驟1 & 3,即創建一個用於編譯的make文件(創建.s文件),另一個用於執行鏈接?gcc/make - 用於創建彙編和鏈接的make文件

感謝您的啓發& 新年快樂! :)

回答

1

使用的語法如下:

target [target...] : [dependent ....] 
    [ command ...] 

例如:

%.S: %.c 
     $(CC) -S [email protected] -c $< 
%.o: %.S 
     $(CC) -o [email protected] -c $< 

這意味着構建目標foo.o的化妝應建立foo.S和foo.S打造的foo.c $ @意味着目標名稱 $ <意味着目標的第一個依賴關係

+2

我推薦編譯器輸出asm使用'.s'。只能使用'.S'作爲手寫的asm源代碼。 (除非OP的腳本驅動修改添加了需要C預處理器的任何內容)。 –

+2

我實際上會建議生成像.s_orig這樣的自定義擴展,然後添加另一個規則%.s:%.s_orig,它將運行添加nops的腳本(如果可以使用腳本完成)以及%.o的最終規則:%.s如答案。這樣makefile將覆蓋所有步驟。 :) – Ped7g

+0

非常感謝你的回答!但是,參數' - @'是什麼意思(你的意思是'$ @',我在整個手冊頁上找不到' - @')。 – OliverJL