吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 1946|回复: 2

[C/C++] c语言系列!日常学习分享!(2)

[复制链接]
武大郎 发表于 2017-6-2 02:39 | 显示全部楼层 |阅读模式

本帖最后由 武大郎 于 2017-6-2 03:03 编辑

开新坑!上期答案第一题为 c  因为空语句出现在判断语句下面是会影响的!比如 A0EQ(R8$JLV0SE94K1$XQXY.png 6R(K0CQF]RFGS12DLILIF75.png
看,本来不该执行的,但是就因为有空语句一条!他执行了!!!!空语句也是语句,他改变了流程控制!他控制了空语句不显示!不信写个输出函数printf(“1”)放在空函数也就是前面不用加分号了;你看看输出1不!

第二题 sizeof 这个没啥说的,本身就是关键字!所以不能用! 为什么可能是因为怕乱!他重名了!之前被系统函数用过一次了,怕下次调用乱了,所以你就不能再用了,不信定义2个一样的函数名试试!在同一个程序!


第三题 a 都说了合适,而且其他都错了!为什么后边写多了你就知道!也可以百度去(学习的好办法)!


第四题 c double是浮点型!所以会有小数点!

第五题 b 可以测试很简单的 这是中画线— 这是下画线_

第六题 d  default 这个是标准的 其他都错了!要不就不是

第七题 d 还是d 其他都错


好了入正题今天的学习

[W}MQOK(J3H5YA@CZ8E3%O7.png
从这里可以看到今天要写的代码 是 调用传值的问题 为什么这里的值会变成这样呢!
流程不懂的下个断点用f9 下载main函数哪里然后 f 10 走一步 看黄色箭头就知道他怎么走了
原因就是他对main函数里的值只是复制了一份过去!并没有直接修改main里边的变量,所以自增哪里只是自增自己传过去的值!
这里牵扯到内存分配的问题,是反汇编的。。。怎么跟你们讲呢,一大堆!我给你们分析下,画个堆栈图吧!
4:    void main()
5:    {
00401020   push        ebp               
00401021   mov         ebp,esp
00401023   sub         esp,44h
00401026   push        ebx
00401027   push        esi
00401028   push        edi
00401029   lea         edi,[ebp-44h]
0040102C   mov         ecx,11h
00401031   mov         eax,0CCCCCCCCh
00401036   rep stos    dword ptr [edi]
6:        int num=3; //定义变量num 赋值3
00401038   mov         dword ptr [ebp-4],3
7:        add(num); //调用函数add并传递值num
0040103F   mov         eax,dword ptr [ebp-4]
00401042   push        eax
00401043   call        @ILT+0(add) (00401005) 跳转这里 1111111111111111111111111111111
00401048   add         esp,4
8:        printf("%d\n",num); //输出数值!
0040104B   mov         ecx,dword ptr [ebp-4]
0040104E   push        ecx
0040104F   push        offset string "%d\n" (0042001c)
00401054   call        printf (004010e0)
00401059   add         esp,8
9:    }
0040105C   pop         edi
0040105D   pop         esi
0040105E   pop         ebx
0040105F   add         esp,44h
00401062   cmp         ebp,esp
00401064   call        __chkesp (00401160)
00401069   mov         esp,ebp
0040106B   pop         ebp
0040106C   ret


1111111111111111111111111111111111111
10:   void add(int num)
11:   {
00401080   push        ebp
00401081   mov         ebp,esp
00401083   sub         esp,40h
00401086   push        ebx
00401087   push        esi
00401088   push        edi
00401089   lea         edi,[ebp-40h]
0040108C   mov         ecx,10h
00401091   mov         eax,0CCCCCCCCh
00401096   rep stos    dword ptr [edi]
12:       num++; //自增
00401098   mov         eax,dword ptr [ebp+8]
0040109B   add         eax,1
0040109E   mov         dword ptr [ebp+8],eax
13:       printf("%d\n",num);//输出!
004010A1   mov         ecx,dword ptr [ebp+8]
004010A4   push        ecx
004010A5   push        offset string "%d\n" (0042001c)
004010AA   call        printf (004010e0)
004010AF   add         esp,8
14:   }
004010B2   pop         edi
004010B3   pop         esi
004010B4   pop         ebx
004010B5   add         esp,40h
004010B8   cmp         ebp,esp
004010BA   call        __chkesp (00401160)
004010BF   mov         esp,ebp
004010C1   pop         ebp
004010C2   ret

~8F]]IZKMJU761}(UQ{OGD1.png
B{CP6}AQ_(K9N_~[~N7E374.png
V%D]HNCGA5{5C8T_M3XON{X.png

到这里就算完了,就不继续跟了,后边的pop都是恢复堆栈的,调用完毕后会恢复成一开始的样子,但是内存中使用过的数据是没清除的!
从这里可以看到关键代码!他跟add函数进去之后
mov         eax,dword ptr [ebp+8]          这是当初call进来的时候存入的eax 所以他更改的值
0040109B   add         eax,1
0040109E   mov         dword ptr [ebp+8],eax
那吗谁给eax的值呢
mov         eax,dword ptr [ebp-4]
00401042   push        eax
00401043   call        @ILT+0(add) (00401005)


是这段 ,可以看出,这是刚开始的传入值,传入后,他就跟原来的函数内存没关系了!他复制了一份到新分配的内存里,他后边修改的就不是他这个值了,一个三一个四还是很好辨认的

。。。。。。反正我看着一目了然!你们看我觉得应该很蒙吧!我也这样蒙过!本来说推荐补习班的,后来想想,你们学不会跟我有毛关系!被坑也没事,又不是我的钱!管理要是给我判断为广告了,损失的就是我了~~下一贴走起








评分

参与人数 4HB +2 THX +2 收起 理由
禽大师 + 1
消逝的过去 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
agan8888 + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
余音绕梁 发表于 2017-6-18 11:37 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
15753957609 发表于 2017-10-24 22:01 | 显示全部楼层

看看大佬发的
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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