VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 889|回复: 0

[原创] 献丑了,C和ASM(002)手写数组

[复制链接]
39_avatar_middle
最佳答案
0 
在线会员 发表于 2021-9-18 14:08:36 | 显示全部楼层 |阅读模式
本帖最后由 hacksky 于 2021-9-18 14:12 编辑
  1. #include "stdio.h"


  2. int  Function(int arry[])
  3. {
  4.         int a=arry[0];
  5.         int b=arry[1];
  6.         return a+b;

  7. }
  8. //////////////////////////////////////////////////////////////////////////
  9. _declspec(naked) int FunctionAsm()
  10. {
  11.          _asm
  12.          {
  13.                  push ebp
  14.                  mov ebp,esp
  15.                  sub esp,0x48
  16.                  push edi
  17.                  push esi
  18.                  push ecx
  19.                  push ebx
  20.                  mov eax,0xcccccccc
  21.                  mov ecx,0x12
  22.                  lea edi, dword ptr[ebp-0x48]
  23.                  rep stosd
  24.                  /////////////////////
  25.                  mov eax,[ebp+0x8]
  26.                  mov ecx,[eax] //取数组第一个元素
  27.                  /////////////////////
  28.                  mov eax,[ebp+0x8]
  29.                  mov eax,[eax+0x4]
  30.                  add eax,ecx

  31.                  /////////////////////
  32.                  pop ebx
  33.                  pop ecx
  34.                  pop esi
  35.                  pop edi
  36.                  mov esp,ebp
  37.                  pop ebp
  38.                  ret

  39.          }

  40. }



  41. void mainold()
  42. {
  43.         int arry[5]={1,2,3,4,5};
  44.     int r=Function(arry);
  45.         printf("a+b=%d",r);

  46.         getchar();

  47. }

  48. void main()
  49. {
  50.         int r;
  51.         _asm
  52.         {
  53.                 mov dword ptr[ebp-0x14],0x1
  54.                 mov dword ptr[ebp-0x10],0x2
  55.                 mov dword ptr[ebp-0xc] ,0x3
  56.                 mov dword ptr[ebp-0x8], 0x4
  57.                 mov dword ptr[ebp-0x4] ,0x5
  58.                 //取数组首地址
  59.                 lea eax,dword ptr[ebp-0x14]
  60.                 push eax
  61.                 call FunctionAsm
  62.                 add esp,0x4
  63.                 mov r,eax
  64.         }
  65.         printf("a+b=%d",r);

  66.         getchar();
  67. }

复制代码




上一篇:献丑了 C和ASM(001)
下一篇:献丑了 C和ASM之结构体
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-12-8 17:56

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表