如题。一个支持任意数目参数的stdcall调用子程序

#leave = {201}

#call_code = { 88, 135, 4, 36, 255, 224 }


.子程序 __启动窗口_创建完毕

call_1 (&子程序1, 1)
    

.子程序 子程序1
.参数 a

调试输出 (a)
   
.子程序 call_0, 整数型
.参数 proc, 子程序指针 

     
.子程序 call_1
.参数 proc, 子程序指针
.参数 a

置入代码 (#leave )
置入代码 (#call_code)
   

.子程序 call_2
.参数 proc, 子程序指针
.参数 a
.参数 b

置入代码 (#leave )
置入代码 (#call_code)


.子程序 call_3
.参数 proc, 子程序指针
.参数 a
.参数 b
.参数 c

置入代码 (#leave )
置入代码 (#call_code)


/////////////// 

/////

copy...

置入代码 ({ 201, 88, 135, 4, 36, 255, 224 })

转自易友


再往下的可以支持理论上无数个的参数(实际被系统堆栈大小限制了)...

只需要在后面加上[参数]成员就够了。。。

#call_code 仅3句。有兴趣的可以看看。要支持thiscall也很简单。

注意。。由于没有了ebp保护,所以注意一定要[被调用的子程序]参数数量与声名的参数数量一样,否则会产生异常(如在循环内就出现了问题)...像易的调用子程序若参数数量不对齐的话直接崩溃。。。汗


置入代码 (#leave)
置入代码 (#call_code)
返回 (0)