使用D内联程序集im试图实现动态调用stdcall函数(使用动态参数)
我有下面的程序集,args是一个32位整数数组的空指针,argc是参数数,ret是空指针,地址是函数地址。
MOV EBX, 0;
iterator:
MOV EAX, DWORD PTR [args];
PUSH EAX;
ADD EBX, 1;
ADD EAX, 4;
CMP EBX, DWORD PTR argc;
JNE iterator;
MOV EAX, ADDress;
CALL EAX;
MOV [ret], EAX;
RET 0;浮点参数是如何传递的?
发布于 2016-08-29 00:23:39
微软在这个问题上非常沉默。
这是因为stdcall只用于WinAPI调用。
而且,据我所知,没有接受浮点参数的WinAPI调用。
依 to 全 --我可以找到的文档 --所有参数都被推送到堆栈上。
这包括浮点参数。
如果我在编译器中编译了以下代码片段,它就会确认如下:
void __stdcall test3(double a, double b, double c) {
};
.....
test3(a,b,c);
.....
//This produces the following code as per the stdcall convention.
004182B4 55 push ebp
004182B5 8BEC mov ebp,esp
004182B7 83C4E8 add esp,-$18
004182BA FF75EC push dword ptr [ebp-$14]
004182BD FF75E8 push dword ptr [ebp-$18]
004182C0 FF75F4 push dword ptr [ebp-$0c]
004182C3 FF75F0 push dword ptr [ebp-$10]
004182C6 FF75FC push dword ptr [ebp-$04]
004182C9 FF75F8 push dword ptr [ebp-$08]
004182CC E8ABFFFFFF call Test3注意,在ST(0)中返回浮点返回值。
https://stackoverflow.com/questions/30054280
复制相似问题