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

前情提要

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

源代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
.版本 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)