1

残念ながら、今のところ、Linuxを使用する代わりに、アセンブリコードをプログラムするためにWindowsに切り替える必要があります。しかし、NASMによって生成された.objファイルをリンクしようとすると、「gcc:Createprocess:No suchfileordirectory」というエラーが発生します。

私のコード:

GLOBAL _main
EXTERN _printf

_main:
    push message 
    call _printf
    add esp, 4
    ret
message:
    db 'Hello, world',10,0

.objファイルをGCCと同じディレクトリに移動してみました。また、GCCと同じディレクトリにすべてをコンパイルしてみました。バッチファイルでコンパイルするときに環境変数を使用せず、代わりに手動でディレクトリを変更します。また、GCCをG++およびMinGWに付属する他のすべてのコンパイラと同じディレクトリにインストールしています。

なぜこのエラーが発生するのですか?

前もって感謝します

4

1 に答える 1

0

これは私のために働いたものです:

ASM ファイル:

; file: blahasm.asm
; assemble with nasm (v 2.10, Mar 12 2012): nasm -f elf32 blahasm.asm -o blahasm.o
bits 32

global _blah

_blah:
  mov eax, 42
  ret

C ファイル:

// file: blahc.c
// compile with MinGW x86 (gcc v 4.6.2): gcc -Wall -O2 blahc.c blahasm.o -o blah.exe
#include <stdio.h>

extern int blah(void);

int main(void)
{
  printf("blah():%d\n", blah());
  return 0;
}

出力:

blah():42

elf32動作する唯一の形式がであり、MinGW である gcc の Windows ポートでサポートされていることに驚いています。

更新

NASM と MinGW を使用して、アセンブリのみのプログラムを作成しました。

ASM ファイル:

; file: nsm.asm
; assemble with NASM (v 2.10, Mar 12 2012): nasm -f elf32 nsm.asm -o nsm.o
; compile (link) with MinGW x86 (gcc v 4.6.2): gcc -Wall -O2 nsm.o -o nsm.exe
bits 32

extern ___main
extern _printf

global _main

    section .rdata

textstr:
    db "Hello World!", 10, 0

    section .text.startup

_main:
    call    ___main
    push    textstr
    call    _printf
    add     esp, 4
    ret

出力:

Hello World!

"MinGW Shell" (MSYS) から gcc を実行していますが、プログラムを標準ライブラリと正常にリンクさせるために追加のコマンド ライン パラメータを指定する必要はありません。また、MinGW と MSYS のインストールに関して特別なことをする必要はありませんでした。すべてデフォルトのセットアップ パラメータを使用したと思います。

于 2012-10-15T02:16:53.880 に答える