本帖最后由 happy886rr 于 2017-6-16 22:50 编辑
回复 21# bailong360
用着很多github的开源工具, 写的东西不开源,不像github的风格。
capix最后的汇编可以整合为一个- double callAPI(void *hProc, int *arr, int len, int callMODE, BOOL retMODE)
- {
- int retINT;
- double retLLF;
-
- __asm
- {
- mov ebx, dword ptr [arr] ;//把arr指向的地址(参数列表的尾地址)放入ebx
- mov ecx, dword ptr [len] ;//把len的值放入ecx,作为循环控制变量
- dec ecx ;//递减ecx
-
- LOOP1:
- mov eax, dword ptr [ebx] ;//倒序把数组arr(ebx指向的内容)的内容加载到eax
- sub ebx, 4 ;//把ebx的内容递减4(ebx指向的前移一位)
- push eax ;//把eax压栈
- dec ecx ;//递减ecx
-
- jns LOOP1 ;//如果ecx不为负值,则跳转到LOOP1:
-
- call dword ptr [hProc] ;//调用API
- fstp retLLF;
- mov retINT, eax ;//返回值存入result
-
- mov ebx, dword ptr [len] ;//把len的值放入ebx
- SHL ebx, 2 ;//左移两位,这是可变参数的大小
- cmp callMODE, 0
- je LOOP2
- add esp, ebx
- LOOP2:
- xor eax, eax ;//清空eax
- }
- return (retMODE)?retINT:retLLF;
- }
复制代码
|