2012-10-22 27 views
1

我有一個非常專業的文件,用x86編寫,Linux下編譯,在GCC下編譯。我需要將該代碼移到Visual Studio項目中,並且mll64.exe需要程序集文件採用英特爾格式。如何將AT&T Style彙編代碼移至Visual Studio和Intel Style Syntax?

我試圖建立一個跨平臺的DLL,但它不工作:

十五時47分19秒cpudiag2>的gcc -o -shared my.dll my.o

/usr/bin/ld:my.o:重新定位R_X86_64_32S在製作共享對象時不能使用「本地符號」 ;重新編譯-fPIC my.o:看不懂的符號:錯誤值collect2:LD返回1退出 狀態

15時47分19秒cpudiag2>的gcc -fPIC my.S

/usr/lib目錄/ gcc/x86_64-redhat-linux/4.1.2 /../../../../ lib64/crt1.o:在 函數`_start':(.text + 0x20):未定義的引用'main' collect2:LD返回1個退出狀態

於是我試圖讓從目標文件到Intel語法GCC編譯但這並不工作。以下兩個命令都會導致AT & T語法中的反編譯彙編代碼。爲什麼?

objdump的-d -M =英特爾my.o

GCC -S -masm =英特爾my.o

回答

3
各種

混亂那裏。

  1. 命名文件my.dll不會改變其格式
  2. 因爲庫格式是在Linux和Windows不同,你不能讓一個跨平臺的dll
  3. -fPIC不會神奇地讓手寫ASM PIC,它僅適用於編譯器產生的代碼
  4. 得到一個目標文件,你應該通過-c開關gcc(但不會幫助你在這種情況下)
  5. gcc -S不拆機的OB JECT文件,它是從C代碼
  6. objdump -d -M=intel my.o應該工作總成,但它所產生不適用於組裝適合(尤其是不能在Windows,因爲使用不同的調用約定)

你最好的選擇可能將所有代碼組裝到windows目標文件中(使用針對windows的gcc/gas),並將其作爲二進制包含在項目中(僅用於鏈接),如果需要,可以使用小膠合層調用約定轉換。雖然不允許你編輯程序集源代碼。