装配窗口功能 - 功能名称后的数字?

smo*_*als -1 windows assembly winapi nasm

我正在尝试在程序集中创建一个使用一些Windows API函数的程序,特别是GetConsoleWindow,MessageBox和ShowWindow.我通过externing找到了如何在随机网站上使用MessageBox _MessageBoxA@16.我尝试使用相同的GetConsoleWindow,extern _GetConsoleWindowA@16但是在链接时获取错误:(.text+0x4): undefined reference to GetConsoleWindowA@16'.

我正在使用以下命令进行编译:nasm -f win32 message.asm -o message.obj,ld message.obj -o message.exe函数名末尾的数字来自哪里?(例如@ 16).或者我应该完全撇开其他东西?

IIn*_*ble 7

这些是装饰名称,特别是使用C装饰作为__stdcall调用约定1:

前导下划线(_)和尾随符号(@)后跟参数列表中的十进制字节数

尾部AW字符指定API调用的ANSI或Unicode版本.对于GetConsoleWindow,没有单独的ANSI或Unicode版本,因为API不直接(或间接)使用字符串作为参数或返回值.因此,装饰符号_GetConsoleWindow@0.


1 仅适用于32位代码.在64位代码中,符号被导出未修饰,例如GetConsoleWindow在这种情况下.