VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 701|回复: 0

[交流] 献丑了 C和ASM(001)

[复制链接]
39_avatar_middle
最佳答案
0 
在线会员 发表于 2021-9-18 13:05:48 | 显示全部楼层 |阅读模式

  1. // 参数压栈 EBP+8,EBP+c,EBP+4为ret 地址  局部变量为EBP-4,ebp-8,ebp-....................,返回值存放在EAx,而main的r即为ebp-4,接收返回值。语言表述能力弱,见谅
  2. #include "stdafx.h"
  3. #include "stdlib.h"
  4. #include "stdio.h"

  5. int Function1()
  6. {
  7.         char a=0x10;
  8.    short b=0x20;
  9.    int   c=0x30;
  10.         return a;  // MOVS EAX,DWORD PTR[EBP-0X4]
  11. }

  12. int Function2(int x,int y)
  13. {
  14.         int Result;
  15.         int A=0x10;
  16.         int B=0x20;
  17.         Result=A+B+x+y;
  18.         return Result;

  19. }

  20. int _declspec(naked) Function2Asm(int x,int y)
  21. {
  22.        
  23.         _asm
  24.         {
  25.                 push ebp
  26.                 mov ebp,esp
  27.                 sub esp,0x48
  28.                 push edi
  29.                 push esi
  30.                 push ecx
  31.                 mov eax,0xcccccccc
  32.                 mov ecx,0x12
  33.                 lea edi,[ebp-0x48]
  34.                 rep stosd
  35.                 ///////////////////
  36.                 mov dword ptr [ebp-0x4],0x10
  37.                 mov eax,[ebp-0x4]
  38.                 mov dword ptr[ebp-0x8],0x20
  39.                 mov ecx,[ebp-0x8]
  40.                 add eax,ecx
  41.                 add eax,[ebp+0x8]
  42.                 add eax,[ebp+0xc]
  43.                 //////////////////
  44.                 pop ecx
  45.                 pop esi
  46.                 pop edi
  47.                 mov esp,ebp
  48.                 pop ebp
  49.                 ret
  50.         }
  51.          
  52. }



  53. void  main()
  54. {
  55.         int r;
  56. //        int r=Function1();
  57. //    int r=Function2(0x30,0x40);
  58.         _asm
  59.         {
  60.                 push  0x40
  61.                 push  0x30
  62.                 call Function2Asm
  63.                 add esp,0x8
  64.                 mov r,eax
  65.         }

  66.         printf("%x",r);
  67.         getchar();
  68. }
复制代码




上一篇:献丑了,C和ASM
下一篇:献丑了,C和ASM(002)手写数组
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

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

关闭

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

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

GMT+8, 2022-12-1 21:05

Powered by CcTry.CoM

© 2009-2021 cctry.com

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