64位程序已经抛弃了_stdcall, 等, 这个OK
但是在使用 ml64 进行汇编时, 似乎仍然使用的是stdcall;
如下:
// .asm
.CODE
Int_3 proc a:DWORD,b:DWORD,c:DWORD,d:DWORD
mov ebx,a
mov rax, 12345h
ret
Int_3 ENDP
END ; 文件结束
// .asm 编译输出
000000013F051020 push rbp
000000013F051021 mov rbp,rsp
000000013F051024 mov ebx,dword ptr [rbp+10h] // 为什么调用以ecx传递, 而内部仍然用栈?
000000013F051027 mov rax,12345h
000000013F05102E leave
000000013F05102F ret
// .cpp
extern"C" void __stdcall Int_3(unsigned long a, long b, long c);
int _tmain(int argc, _TCHAR* argv[])
{
Int_3(10, 15, 16);
return 0;
}
// .cpp 编译输出(部分)
Int_3(10, 15, 16);
000000013F051061 mov r8d,10h
000000013F051067 mov edx,0Fh
000000013F05106C mov ecx,0Ah
000000013F051071 call @ILT+5(Int_3) (13F05100Ah)
问题有:
1: 引用声明为3个参数, 而汇编原型为4个参数, 这样竟然也可通过?
2: 64位调用采用了64位的调用法(_fastcall?),而汇编子程序对参数的使用仍然为_stdcall模式?
请教如何解决, 谢谢!
ps: 开发环境为vs c++