查看: 561|回复: 5

[原创图文] 逆向学习第3天_输入输出函数的使用

[复制链接]

15

主题

28

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
198
荣耀
0
rank
0
违规
0
发表于 2020-10-13 14:33:34 | 显示全部楼层 |阅读模式
本帖最后由 Guido 于 2020-10-13 21:14 编辑

1.putchar('char')函数               参数为整型或者是个字符
               输出一个字符
2.putc('char',  )函数
               两个参数,第一个的字符,第二个是指定位置(涉及到了指针)
               putchar('a');==putc('a',stdout);     stdout就是直接打印在显示器
3.puts("string")函数
               参数为字符串,直接打印在显示器上    会自动换行
4.printf()函数
                标准输出,通常用这个     不会自动换行            puts("xuenixiang");==printf("xuenixiang\n");
                %d   %u   %x   %X   %f    %s  %c 等都需要会使用,分别是整型、无符号整形、小写16进制、大写16进制、浮点型、字符串型、字符型


5.关于声明变量定义后  和   “&”的内存观测

逆向学习第3天_输入输出函数的使用

逆向学习第3天_输入输出函数的使用

6.小作业
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
        int nNum1, nNum2, nNum3;
        char sName1[20], sName2[20], sName3[20];
        float nChinese1, nChinese2, nChinese3;
        float nMath1,nMath2, nMath3;
        float nEnglish1, nEnglish2, nEnglish3;
        printf("请输入第一个   学号 姓名 语文成绩  数学成绩 英语成绩\n");
        scanf("%d%s%f%f%f", &nNum1, sName1, &nChinese1, &nMath1, &nEnglish1);

        printf("请输入第二个   学号 姓名 语文成绩  数学成绩 英语成绩\n");
        scanf("%d%s%f%f%f", &nNum2, &sName2, &nChinese2, &nMath2, &nEnglish2);

        printf("请输入第三个   学号 姓名 语文成绩  数学成绩 英语成绩\n");
        scanf("%d%s%f%f%f", &nNum3, &sName3, &nChinese3, &nMath3, &nEnglish3);
        
        printf("\n\n\n正在制表请稍等!\n\n\n");

        printf("学号\t姓名\t语文成绩\t数学成绩\t英语成绩\t总成绩\t\t平均分\n");
        printf("%d\t%s\t%0.1f\t\t%0.1f\t\t%0.1f\t\t%0.1f\t\t%0.1f\n", nNum1, sName1, nChinese1, nMath1, nEnglish1,nChinese1+nMath1+nEnglish1,(nChinese1 + nMath1 + nEnglish1)/3);
        printf("%d\t%s\t%0.1f\t\t%0.1f\t\t%0.1f\t\t%0.1f\t\t%0.1f\n", nNum2, sName2, nChinese2, nMath2, nEnglish2, nChinese2 + nMath2 + nEnglish2, (nChinese2 + nMath2 + nEnglish2) / 3);
        printf("%d\t%s\t%0.1f\t\t%0.1f\t\t%0.1f\t\t%0.1f\t\t%0.1f\n", nNum3, sName3, nChinese3, nMath3, nEnglish3, nChinese3 + nMath3 + nEnglish3, (nChinese3 + nMath3 + nEnglish3) / 3);


        printf("语文平均分:%0.2f\t数学平均分:%0.2f\t英语平均分:%0.2f\t总平均分:%0.2f\t\n\n\n", (nChinese1 + nChinese2 + nChinese3) / 3, (nMath1 + nMath2 + nMath3) / 3, (nEnglish1 + nEnglish2 + nEnglish3) / 3,(nChinese1 + nChinese2 + nChinese3+ nMath1 + nMath2 + nMath3+ nEnglish1 + nEnglish2 + nEnglish3)/9);

        return 0;
}

逆向学习第3天_输入输出函数的使用

逆向学习第3天_输入输出函数的使用

逆向学习第3天_输入输出函数的使用

逆向学习第3天_输入输出函数的使用

7.总结

其实对于输入输出函数早已掌握,此次所学的重点是在于对内存的把握,就如老师所说,这不在是大学表面所学的C语言,要深入到内存中去。








温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛
发表于 2020-10-14 18:56:11 | 显示全部楼层
Guido 发表于 2020-10-13 21:18
好嘞,贴子刚整理完

倒数第二个图片里还存在一个问题,有点迷惑啦。

这个问题问得好,首先,你这个变量属于main函数的局部变量,局部变量使用的是栈空间(一般全局变量和静态变量会用到堆空间),而栈空间的布局,时从高地址到低地址倒序排列的,栈顶是低地址。根据栈的FILO规则,先声明的变量会先分配内存空间,所以会在栈底(高地址),而后声明的变量后分配栈空间,所以在栈顶(低地址)。综上所述,你的问题应该就解决了,这些内容我在看雪的课程里都有讲到,想了解更多可以去关注一下这个课程:https://www.kanxue.com/book-brief-57.htm
image.png
image.png
image.png


点评

明白了。 刚才在int main();函数之外先后定义了 int a=99,b=97;这样就是先后顺序了。 总结就是,局部变量用到了栈,FILO就是first in last out 先进后出  详情 回复 发表于 2020-10-14 21:01
论坛交流群:672619046
发表于 2020-10-13 18:32:02 | 显示全部楼层
这个很重要,这类输入输出函数在没有长度限制的时候,是溢出的一个关键点,可以了解一下这篇帖子,https://www.xuenixiang.com/thread-1903-1-1.html,我们通常说的软件破解,高级一点的破解手段就是通过溢出,来修改它的关键代码,获得更高的权限

点评

好嘞,贴子刚整理完 倒数第二个图片里还存在一个问题,有点迷惑啦。  详情 回复 发表于 2020-10-13 21:18
论坛交流群:672619046

15

主题

28

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
198
荣耀
0
rank
0
违规
0
 楼主| 发表于 2020-10-13 21:18:11 | 显示全部楼层
roger 发表于 2020-10-13 18:32
这个很重要,这类输入输出函数在没有长度限制的时候,是溢出的一个关键点,可以了解一下这篇帖子,https:// ...

好嘞,贴子刚整理完

倒数第二个图片里还存在一个问题,有点迷惑啦。
学逆向论坛-免费的逆向学习论坛

5

主题

16

帖子

0

精华

初级会员

Rank: 4

学币
2
荣耀
0
rank
270
违规
0

    发表于 2020-10-14 08:35:42 | 显示全部楼层
    感谢楼主分享,学习学习
    学逆向论坛-免费的逆向学习论坛

    15

    主题

    28

    帖子

    2

    精华

    高级会员

    Rank: 12Rank: 12Rank: 12

    学币
    198
    荣耀
    0
    rank
    0
    违规
    0
     楼主| 发表于 2020-10-14 21:01:17 | 显示全部楼层
    roger 发表于 2020-10-14 18:56
    这个问题问得好,首先,你这个变量属于main函数的局部变量,局部变量使用的是栈空间(一般全局变量和静态 ...

    明白了。
    刚才在int main();函数之外先后定义了 int a=99,b=97;这样就是先后顺序了。

    总结就是,局部变量用到了栈,FILO就是first in last out 先进后出
    学逆向论坛-免费的逆向学习论坛
    微信公众号
    快速回复 返回顶部 返回列表