易语言 汇编动态调用函数 自动平栈

当做备忘吧,希望能帮到大家,支持cdecl和stdcall调用,自动平栈。

.版本 2

.子程序 汇编动态调用函数, 整数型, 公开
.参数 地址, 整数型, , 可以为_CDECL和_stdcall
.参数 缓存区1, 整数型, 参考 可空, 一定要为参考,无需输入,为缓冲区(用来备份堆栈,以方便平衡栈)
.参数 缓存区或返回值, 整数型, 参考 可空, 一定要为参考,无需输入,为缓冲区(用来备份EAX,以方便返回内容,如果在此处填写变量地址则改变量会变为调用子程序的返回值)
.参数 参数1, 整数型, 可空
.参数 参数2, 整数型, 可空
.参数 参数3, 整数型, 可空
.参数 参数4, 整数型, 可空
.参数 参数5, 整数型, 可空
.参数 参数6, 整数型, 可空
.参数 参数7, 整数型, 可空
.参数 参数8, 整数型, 可空
.参数 参数9, 整数型, 可空
.参数 参数10, 整数型, 可空
.参数 参数11, 整数型, 可空
.参数 参数12, 整数型, 可空
.参数 参数13, 整数型, 可空
.参数 参数14, 整数型, 可空
.参数 参数15, 整数型, 可空

置入代码 ({ 137, 101, 248, 86, 81, 51, 201, 81, 198, 193, 15, 139, 245, 129, 198, 152, 0, 0, 0, 131, 238, 8, 139, 198, 139, 0, 133, 192, 116, 8, 139, 70, 252, 80, 131, 69, 244, 4, 226, 235, 199, 192, 0, 0, 0, 0, 255, 85, 8, 139, 216, 139, 141, 20, 0, 0, 0, 137, 1, 139, 195, 41, 165, 248, 255, 255, 255, 3, 165, 248, 255, 255, 255, 201, 195 })
' mov dword ptr [ebp-08h],esp
' push esi
' push ecx
' xor ecx,ecx
' push ecx
' mov cl,0Fh
' mov esi,ebp
' add esi,00000098h
' Label2:
' sub esi,08h
' mov eax,esi
' mov eax,dword ptr [eax]
' test eax,eax
' je Label1
' mov eax,dword ptr [esi-04h]
' push eax
' add dword ptr [ebp-0Ch],04h
' Label1:
' loop Label2
' mov eax,00000000h
' call dword ptr [ebp+08h]
' mov ebx,eax
' mov ecx,dword ptr [ebp+00000014h]
' mov dword ptr [ecx],eax
' mov eax,ebx
' sub dword ptr [ebp-00000008h],esp
' add esp,dword ptr [ebp-00000008h]
' leave
' ret
返回 (1)


3 Comments (3118 Views)

  1. 枫岚 says:
    我觉得应该吧参数改为无限的

Leave a Reply

Your email address will not be published. Required fields are marked *