- UID
- 7437
- 精华
- 积分
- 1235
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
突然想的一个点子 不知道是否可行 我觉得这样连cdecl的函数 我都敢去调用 只要参数不超过10个。。。
- Asm '这个可以支持多达10个参数的任意回调函数(回调函数的参数数量可以随意)
- push ebp ; mov ebp, esp ; Sub esp, 16 + 40
-
- mov DWORD Ptr [ebp - 16], eax '保存eax
- mov DWORD Ptr [ebp - 12], ecx '保存ecx
- mov DWORD Ptr [ebp - 8], esi '保存esi
- mov DWORD Ptr [ebp - 4], edi '保存edi
-
- lea edi, [esp + 0]
- lea esi, [ebp + 12]
- mov ecx, 10 '复制 10个参数到 新开的栈区
- rep movsd
- lea edi, [ebp + 12]
- mov ecx, 10 '置零 10个参数的 栈空间
- mov eax, 0
- rep stosd
-
- mov eax, DWORD Ptr [ebp - 16] '还原eax
- mov ecx, DWORD Ptr [ebp - 12] '还原ecx
- mov esi, DWORD Ptr [ebp - 8] '还原esi
- mov edi, DWORD Ptr [ebp - 4] '还原edi
-
- Call DWORD Ptr [ebp + 8] '调用 回调函数
-
- mov esp, ebp ; pop ebp ; ret 44
- End Asm
复制代码 |
|