Microsoft Visual Studio 2012 で作成されたオブジェクト ファイルにできるだけ近いオブジェクト ファイルを NASM で作成しようとしています。
cl.exe
具体的には、 and doを使用してオブジェクト ファイルを作成するとdumpbin /all binary.obj
、次のような興味深い行が表示されます。
Offset Type Applied To Symbol Index Symbol Name
-------- ------- ---------- ------------ -----------
00000007 DIR32 00000000 B __imp__GetModuleHandleA@4
しかし、私が行うdumpbin /all nasmobj.obj
と、同様の、しかしわずかに異なる行が表示されます。
Offset Type Applied To Symbol Index Symbol Name
-------- ------- ---------- ------------ -----------
00000007 REL32 00000000 7 __imp__GetModuleHandleA@4
したがって、違いは、MSVC が「直接」再配置である再配置を生成するのに対し、私の NASM コードは「相対」再配置を生成することです。どうすればこれを修正できますか?
NASM コードを次のようにコンパイルしています。
nasm -f win32 nasmtst.s
対象の NASM コードは次のとおりです。
SECTION .text
EXTERN __imp__GetModuleHandleA@4
%define GetModuleHandleA (__imp__GetModuleHandleA@4)
; code happens
...
call GetModuleHandleA
...
; more code happens