【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

MASMでシンボルをエクスポート

MASMでシンボルをエクスポートする方法として、PROC〜ENDPの方法がよく紹介されます。インポートしたシンボルにジャンプする例です。

.386
.MODEL FLAT
.CODE
EXTERN proc0:NEAR

proc1 PROC
	jmp proc0
proc1 ENDP

END

他のアセンブラから変換しようとするとENDPの位置を特定する必要があります。他の方法を調べたところ、ラベルをPUBLICとして定義すればエクスポートできます。

.386
.MODEL FLAT
.CODE
EXTERN proc0:NEAR

EXPORT proc1
proc1:
	jmp proc0

END

NASM

NASMではPUBLICに相当するのがGLOBALです。EXTERNに型を付ける必要はありません。

BITS 32
SECTION .text
EXTERN proc0
GLOBAL proc1

proc1:
        jmp proc0

VC++

VC++アセンブラを使用するにはカスタムビルドステップを定義する必要があります。以下に例を示します。

コマンド ライン ml /c /nologo /coff /Zi /Fo"$(ProjectDir)$(IntDir)\asm-$(InputName).obj" "$(InputPath)"
出力ファイル $(ProjectDir)$(IntDir)\asm-$(InputName).obj

この方法でabc.asmをビルドするとasm-abc.objというファイルが出力されます。ファイル名は必要に応じてカスタマイズしてください。