924 pwn学习

9/24 pwn学习

知道了一次完整的pwn攻击流程,现在我们正式开始学习pwn基础知识

—————————pwn方向以 难入门 难提升著称

基础知识-C语言学习-1

由于pwn要求c语言必须掌握,所以我们先进行一段时间的的C语言学习

学习视频:浙江大学翁恺教你C语言程序设计!C语言基础入门!

做判断

if ( im < 0){
    im = 60 + im;
    ih --;
}

当im<0时,将会执行if{}里面的所有内容,如果im!<0,那么将会跳过大括号里的内容去执行后面的代码。

if(条件成立){
    
}

if语句的格式

判断的条件

  • 计算两个值之间的关系,叫做关系运算
运算符 意义
= = 相等
!= 不想等
> 大于
>= 大于或等于
< 小于
<= 小于或等于
  • 当两个值的关系符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0

比如

printf("%d\n",5==3);

不成立,那么输出的结果就是0

优先级

  • 所有的关系运算符的优先级比算术运算的低,但是比赋值运算的高
例如
printf("%d\n",7>=3+4);

输出的结果将是1

  • 判断是否相等的==和!=的优先级比其他的低,而连续的关系运算是从左到右进行的

找零计算器

  • 两个动作:
  1. 输入购买金额
  2. 根据支付的票面进行找零,或告知用户余额不足以购买
  • 程序需要读入用户的两个输入,然后进行一些计算和判断,最后输出结果
//这是一个注释,计算机不会管它
//初始化
int price = 0;
int bill = 0;
//读入金额和票面
print("请输入金额:");
scanf("%d",price);
printf("请输入票面:");
scanf("%d",bill);
//计算找零
if ( bill >= price ) {
    print("应该找您:%d\n" , bill - price);
}

否则的话

接上文,如果钱不够怎么办?

  • 如果程序运行,钱不够,就没有下文了,所以我们需要else
  • esls = 否则的话
//这是一个注释,计算机不会管它
//初始化
int price = 0;
int bill = 0;
//读入金额和票面
printf("请输入金额:");
scanf("%d",price);
printf("请输入票面:");
scanf("%d",bill);
//计算找零
if ( bill >= price ) {
    print("应该找您:%d\n" , bill - price);
}else{
    print("你的钱不够\n");
}
return 0;

if语句再探

  • 一个基本的if语句由一个关键字if开头,跟上在括号里的一个表示条件的逻辑表达式,然后是一对大括号“{}”之间的若干条语句。如果表示条件的逻辑表达式的结果不是零,那么就执行后面跟着的这对大括号中的语句,否则就跳过这些语句不执行,而继续下面的其他语句

也可以没有大括号

if(total > amout)
    total = amount+10;

注意第一行没有分号,没有写错

同理else也可以没有大括号,就不演示了

大括号的作用是满足条件后执行多行代码,两者是不一样的

嵌套的if-else

  • 如果要求输入三个整数,输出其中最大的,应该怎么做?

当if的条件满足或者不满足的时候要执行的语句也可以是if或if-else语句,这就是嵌套的if语句

if (code == READY )
    if (count < 20 )
        printf("一切正常\n");
    else
        printf("继续等待\n");
return 0;

(嵌套函数示例)

else的匹配

  • else总是和最近的if匹配

如果加了大括号,else的意义就发生了变化

if (code == READY ){
    if (count < 20 )
        printf("一切正常\n");
}    else
        printf("继续等待\n");
return 0;

else就和最上面的if匹配,假设count是24,那么输出的结果就是0,不会进入后面那个else(有点混乱

嵌套的if

if(gameover == 0)
    if(player2move == 2)
        print("YOUR TURN\n");
else
    print("MY TURN\n");

大括号另一个作用:确认else究竟是哪个if的

tips

  • 在if或else后面总是用{}
  • 即使只有一条语句的时候

今天的C语言就学到这里

NewStar pwn题目的wp

由于比赛要求,应该不能在比赛结束之前泄露解题办法,所以将在比赛结束后上传wp

不过今天也是成功写完了wp

不过学长说写的太详细了,打算下次只给个思路就好了

pwn基础知识 栈的工作原理-1

栈的工作原理的每一个基础知识,都要求背的很熟练,才有实力去做题目

程序的编译链接

c语言和c++市场占用率很难下去,目前具有不可替代性,但是也有挑战者rust,由于出生时间晚,所以市场占有率很低,所以我们现在研究c语言和c++还大有市场

linux不能通过改后缀名来欺骗操作系统它是个什么文件,它是用文件头来识别的,linux中用file命令来识别文件类型

我们运行的程序储存在磁盘上,运行后载入内存,在内存中与我们交互

在底层中,计算机只认识0和1,比如A,在底层保存为0100 0001,16进制可以直接作为二进制的表示码,0x41就是大写的A,换行符就是0x0A

gcc命令编译c语言源代码

从c源代码到可执行文件的生成过程

  • 编译
    • 由c语言代码生成汇编代码
  • 汇编
    • 由汇编代码生成机器码
  • 链接
    • 将多个机器码的目标文件链接成一个可执行文件

C语言代码—>汇编代码—>目标文件—>可执行文件

gcc -S可以将源代码汇编成汇编文件

linux中执行可执行文件./文件名(当前目录)

1. 如果我们直接vim二进制文件,就会发现全是乱码

为什么是乱码呢

因为在计算机底层编码中,只有特定的一些范围的值,是可以表示成字符的,比如ASCII码的可见范围是10-127,超出这个范围之外的值,就是乱码了

我们可以转换为二进制内容查看

太晚了,明早继续

2024/9/24 23:52

posted @ 2024-09-25 00:12  季夏廿九  阅读(38)  评论(0)    收藏  举报