无法链接汇编程序:无法识别文件格式

时间:2018-03-26 15:18:37

标签: assembly linker 64-bit nasm

我有以下简单的汇编程序(从this website下载)。:

        extern  printf          ; the C function, to be called

        section .data           ; Data section, initialized variables
msg:    db "Hello world", 0     ; C string needs 0
fmt:    db "%s", 10, 0          ; The printf format, "\n",'0'

        section .text           ; Code section.

        global main             ; the standard gcc entry point
main:                           ; the program label for the entry point
        push    rbp             ; set up stack frame, must be alligned

        mov rdi,fmt
        mov rsi,msg
        mov rax,0               ; or can be  xor  rax,rax
        call    printf          ; Call C function

        pop rbp                 ; restore stack

        mov rax,0               ; normal, no error, return value
        ret                     ; return

当我尝试使用NASM从命令行构建时,我没有错误,并且它正确地创建了目标文件。然后我使用命令行选项-m i368pe使用Mingw-w64(ld)(因为我在x64机器上)链接它,但是这失败并显示错误消息:无法识别文件格式。在搜索了一下之后,我发现这与我试图将32位目标文件与64位链接器或其他方式链接的事实有关。但是,这对我来说没有意义,因为我使用-f win64标志构建了目标文件。另外,我相信-m i386pe是一个用于链接的64位标志,所以我在这里做错了什么?

我建立/链接的命令是:

  • 构建:nasm -f win64 -o test.obj test.asm

  • 链接:ld test.obj -m i386pe -o test.exe

0 个答案:

没有答案