我一直在使用NASM在Windows中進行一些x86編程,我遇到了一些困惑。我很困惑,爲什麼我必須這樣做:與NASM一起使用DLL
extern [email protected]
具體來說,我感到困惑的「_」和「@ 4」。我知道'@ 4'是堆棧的大小,但它爲什麼需要?當我用十六進制編輯器查看kernel32.dll時,我只看到'ExitProcess'而不是'_ExitProcess @ 4'。
我也困惑,爲什麼C函數不需要下劃線和堆棧大小像這樣:
extern printf
不是C函數爲什麼需要裝飾品?
我的第三個問題是「這是我應該如何使用這些功能的方式?」現在我正在連接實際的dll文件本身。
我試着在'printf'之前加上一個下劃線'extern _printf',但它沒有編譯。任何想法爲什麼?我將所有對printf的調用都改爲'call _printf'。 – 2012-03-25 16:46:41
@Hudson:它可以使用'extern printf/call printf'?我很驚訝,我的NASM安裝不是這種情況。也許你的NASM真的知道調用約定?你使用了'-fwin32'標誌嗎? – 2012-03-25 16:48:21
是的,這就是我想的。我要看看NASM的文件來找到答案。 – 2012-03-25 16:51:10