pwn四种基本保护

前言

学习pwn,了解到的四种basic protection

1.Stack Guard

• 做完function prologue①的时候回将随机生成的乱数压入stack中,function return前会检查乱数是否又被更动过,若发现被更动则立即结束程式
• 又称canary 金丝雀②

注释:
①function prologue:移动 RSP 和保存寄存器的动作一般处在函数的开头,叫做 function prologue
②canary:看视频讲的有一个了解,在煤矿中有毒或易燃气体的存在,常引起井下爆炸,或发生煤矿工人中毒的事故,而金丝雀对于这类气体很敏感,矿井中存在的微量有毒气体,在对矿工尚未造成威胁时,金丝雀就会出现窒息中毒的症状。所以,一些矿工在下井时带着金丝雀,将它们作为“生物报警器”。

2.DEP

• Data execution prevention 数据执行保护
• 可执行的地方不能写,可写的地方不能执行
• 又称NX
在这里插入图片描述

3.ASLR

• Address Space Layout Randomization 地址空间布局随机化
• 每次程序执行时stack、heap、library 位置都不一样
• 一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的

4.PIE

• Position Independent Execution
• 开启后,code和data也还会ASLR

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的基于 Arduino 的四轮循迹小车 PWM 代码: ``` int IN1 = 9; //定义IN1引脚为9 int IN2 = 8; //定义IN2引脚为8 int IN3 = 7; //定义IN3引脚为7 int IN4 = 6; //定义IN4引脚为6 int PWMA = 10; //定义PWM A引脚为10 int PWMB = 5; //定义PWM B引脚为5 void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(PWMA, OUTPUT); pinMode(PWMB, OUTPUT); } void loop() { //读取四个循迹模块的状态 int left1 = digitalRead(A0); int left2 = digitalRead(A1); int right1 = digitalRead(A2); int right2 = digitalRead(A3); if (left1 == LOW && left2 == LOW && right1 == LOW && right2 == LOW) { //四个传感器都在黑线上 //小车直行 analogWrite(PWMA, 200); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(PWMB, 200); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } else if (left1 == LOW && left2 == HIGH && right1 == LOW && right2 == LOW) { //左边检测到黑线 //小车左转 analogWrite(PWMA, 150); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(PWMB, 150); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } else if (left1 == LOW && left2 == LOW && right1 == LOW && right2 == HIGH) { //右边检测到黑线 //小车右转 analogWrite(PWMA, 150); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(PWMB, 150); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } else if (left1 == LOW && left2 == HIGH && right1 == LOW && right2 == HIGH) { //左右都检测到黑线 //小车后退 analogWrite(PWMA, 200); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(PWMB, 200); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } else { //四个传感器都不在黑线上 //小车停止 analogWrite(PWMA, 0); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); analogWrite(PWMB, 0); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); } } ``` 这里使用了四个循迹模块,分别连接到A0~A3引脚,并通过digitalRead()函数读取它们的状态。根据状态的不同,控制小车的PWM输出和电机方向,从而实现不同的运动方式。需要注意的是,这只是一个简单的示例代码,具体的实现还需要根据硬件电路和传感器的具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值