0

わかりましたので、NASM でコードを組み立て、Golink でリンクしています。DLL を介して Windows API 呼び出しと C 呼び出しを直接使用しています。たとえば、ExitProcess などの場合は kernel32.dll、printf などの場合は msvcrt.dll です。ただし、このような装飾を使用しようとすると、_ExitProcess@4または_printf golink が装飾について不平を言い、/mixフラグの使用を提案します。私がそれを使用すると、Windowsは出力ファイルが有効なwin32プログラムではないと文句を言います。装飾を使用しない場合は正常に動作します。誰が何が起きているのか説明できますか?

例:

extern printf
extern ExitProcess
;A bunch of code which isn't really important to this

次に私のコマンド:

nasm -fwin32 test.asm
golink test.obj kernel32.dll msvcrt.dll /console /entry _start
4

1 に答える 1

1

私はNasmを使用していますが、Windowsでは使用していないため、GoLinkについてはあまり詳しくありません。内部に「装飾」を加えていると思います。先頭にアンダースコアが必要な場合があります。コマンドラインで「--prefix_」を使用すると、Nasmはこれをextern/globalに追加します。

エラーメッセージを注意深く読むと、GoLinkが期待することのヒントが得られる場合があります。試行>エラーになるまで試してください。:)

最高、フランク

于 2012-07-28T22:36:07.727 に答える