|
本帖最后由 hacksky 于 2021-9-18 14:12 编辑
- #include "stdio.h"
- int Function(int arry[])
- {
- int a=arry[0];
- int b=arry[1];
- return a+b;
- }
- //////////////////////////////////////////////////////////////////////////
- _declspec(naked) int FunctionAsm()
- {
- _asm
- {
- push ebp
- mov ebp,esp
- sub esp,0x48
- push edi
- push esi
- push ecx
- push ebx
- mov eax,0xcccccccc
- mov ecx,0x12
- lea edi, dword ptr[ebp-0x48]
- rep stosd
- /////////////////////
- mov eax,[ebp+0x8]
- mov ecx,[eax] //取数组第一个元素
- /////////////////////
- mov eax,[ebp+0x8]
- mov eax,[eax+0x4]
- add eax,ecx
- /////////////////////
- pop ebx
- pop ecx
- pop esi
- pop edi
- mov esp,ebp
- pop ebp
- ret
- }
- }
- void mainold()
- {
- int arry[5]={1,2,3,4,5};
- int r=Function(arry);
- printf("a+b=%d",r);
- getchar();
- }
- void main()
- {
- int r;
- _asm
- {
- mov dword ptr[ebp-0x14],0x1
- mov dword ptr[ebp-0x10],0x2
- mov dword ptr[ebp-0xc] ,0x3
- mov dword ptr[ebp-0x8], 0x4
- mov dword ptr[ebp-0x4] ,0x5
- //取数组首地址
- lea eax,dword ptr[ebp-0x14]
- push eax
- call FunctionAsm
- add esp,0x4
- mov r,eax
- }
- printf("a+b=%d",r);
- getchar();
- }
复制代码 |
上一篇: 献丑了 C和ASM(001)下一篇: 献丑了 C和ASM之结构体
|