Symbols exported by DLLs can be imported not by name but by small number or ordinal. Usually, symbols have both ordinals and names, and in that case ordinals are called "hints" and used by the loader as hints. However, symbols can have only ordinals. They are called import-by-ordinal symbols. You need to manage ordinals by hand so that they will never change if you choose to use the feature. But it's supposed to make dynamic linking faster because it needs no string comparison. Not sure if that claim still stands in year 2015, though. Anyways, the feature exists, and this patch implements that. llvm-svn: 238780
25 lines
514 B
NASM
25 lines
514 B
NASM
;; ml64 hello64.asm /link /subsystem:windows /defaultlib:kernel32 \
|
|
;; /defaultlib:user32 /out:hello64.exe /entry:main
|
|
|
|
extern ExitProcess : PROC
|
|
extern MessageBoxA : PROC
|
|
extern ImportByOrdinal: PROC
|
|
|
|
.data
|
|
caption db 'Hello', 0
|
|
message db 'Hello World!', 0
|
|
|
|
.code
|
|
main PROC
|
|
sub rsp,28h
|
|
mov rcx, 0
|
|
lea rdx, message
|
|
lea r8, caption
|
|
mov r9d, 0
|
|
call MessageBoxA
|
|
mov ecx, 0
|
|
call ExitProcess
|
|
call ImportByOrdinal
|
|
main ENDP
|
|
END
|