考慮只用簡單的32位x86彙編語句文件:在nasm中指定起始地址?
call 0xc1066580
如果我組裝與此文件NASM -f小精靈,我得到:
0: e8 7c 65 06 c1 call 0xc1066581
如果我使用GCC,並指定 - Ttext = 0和-nostdlib我得到:
0: e8 7b 65 06 c1 call c1066580
-nostdlib 不要使用標準系統啓動文件或鏈接時庫。沒有啓動文件,只有指定的庫傳遞給鏈接器,並且忽略指定系統庫鏈接的選項,如-static-libgcc或-shared-libgcc。
但是-Ttext = 0究竟做了什麼?我用它來指定EIP在加載/執行時啓動的入口地址。我找不到-Ttext in the manpages,當我在網上搜索時,我發現這個:
「-Ttext是」--section-start = text「的別名,其內容如下: --section- start = sectionname = org 在輸出文件中找到一個由org指定的絕對地址爲 的部分。您可以根據需要多次使用此選項,以便在命令行中找到多個部分。 ;爲了與其他鏈接器兼容,你可以省略通常與十六進制值相關的前導0x。 注意:段名, 等號(「=」)和org之間不應有空格。
不過,我不覺得我的聯機幫助--section或sectionname或者,當我嘗試--section名稱,以取代-Ttext我得到的,這是無法識別的參數(如果是相關的,這是GCC 4.7.2)。
有人能告訴我,這個解釋(-Ttext)是否準確,我可以在我的手冊中找到它?如果不準確,-Ttext究竟做了什麼?
我的另一個問題是:如何指定一個類似的參數作爲-Ttext到nasm?換句話說,我需要做些什麼才能使nasm產生與gcc相同的輸出?
我試圖在64位和32位系統上執行相同的彙編語句(使用nasm和gcc),我得到了相同的結果。