2012-10-22 53 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),并将其作为二进制包含在项目中(仅用于链接),如果需要,可以使用小胶合层调用约定转换。虽然不允许你编辑程序集源代码。