【单片机FreeRTOS】RTOS移植常见错误
触发任务调度异常xPortPendSVHandler后r14(LR)不为0xfffffffd
这种情况出现在直接在PendSV_Handler里面调用xPortPendSVHandler。当PendSVC触发时,PendSV_Handler 调用xPortPendSVHandler,此时LR寄存器所指向即为PendSV_Handler(出现这种情况后LR寄存器为上一个调用这个函数的值)只需要将中断的C文件中原来的PendSV_Handler删除并重新定义宏即可(原因未知)
12345// void PendSV_Handler(void)// {// xPortPendSVHandler();// }#define xPortPendSVHandler PendSV_Handler
或者直接修改中断向量表所指向的Handler为FreeRTOS的即可![[20241106-1-1.png]]
【STM32&I2C(IIC)&Proteus】基于STM32的Proteus下I2C仿真
IIC协议的通讯过程
IIC的介绍
I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件,实现简单,可扩展性强,不需要 USART、 CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。IIC属于半双工通信协议,所以在通信的时候必须等待当前数据传输结束,方可进行下一次数据的传输。根据 IIC 协议的设计,从设备不能主动发起通信,只有主设备可以发起通信并请求从设备发送数据。
IIC的物理层
IIC比USART,SPI等协议有着最大的优势就是他们不管有多少个从机设备,在建立通信时只需要两根总线就可以进行通讯。由于IIC采用的是同步半双工,所以不需要设置类似波特率的设置
SDA:数据线,用于实现双向传输数据
SCL:时钟线,用于数据收发的同步
它的物理层有如下特点:
它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中, 可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。
一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA) , ...
【ESP32 & Arduino】ESP32入门之环境安装
前言
最近准备学ESP32,于是乎在淘宝愉快的买了一个板子ESP-WROOM-32。买回来正准备对其进行编程。嵌入式入门第一步点一个灯。但是点灯过程中遇到了很多问题。现在就把遇到的问题做一个总结。
安装
驱动安装
在板子到了后第一件事就是插入电脑进行烧写测试,但是在Arduino中无法识别出端口号。于是乎打开了设备管理器一看,发现的确少了个驱动CP2102 USB to USART Bridge Controller。这个驱动是用于USB转TTL的。
到官网下载对应的驱动文件,这里我以Win10为例
下载后解压,双击对应的平台。进行安装
Arduino安装
到Arduino官网下载对应的版本
下载后的打开然后按照自己的喜好安装。
环境配置
前面是软件的安装基本没什么难度,接下来配置一下Arduino开发ESP32。首先去到ESP32官网]。然后会跳转到Github找到列表中的package.json并点击跳转后复制链接。https://github.com/espressif/arduino-esp32/blob/master/package ...
【MCU51&74HC165】使用74HC165移位寄存器实现矩阵键盘的扫描
前述
在闲暇的时候逛B站发现某UP使用了移位寄存器实现1*N矩阵键盘,就想着蛮简单的自己也动手弄一弄才发现踩的坑还挺多的。
今天就从图的设计到程序的编写来实现
今天所使用的单片机型号是MCU51,至于为什么不用STM32等其他主流主控芯片。因为懒的配置GPIO。直接修改寄存器就好了。但是其他单片机也是一样的方法
需要准备的工具
Proteus主要用于仿真
Keil5主要用于开发编写程序
74HC165芯片手册
芯片手册分析
打开芯片手册就可以直接的看到芯片的基本功能
该芯片工作电压在2v ~ 6v
并行输入转串行输出
主要应用在 视频的驱动,输出扩展,和今天要做的矩阵键盘
内部逻辑图
从图中可以看出使用的是RS锁存器进行数据的存储
前面的了解一下即可,重要的还是芯片的管脚
可以从下图看到每个管脚对应的作用
A-G:并行输入端
SER:串行输入端
Qh:串行输出端
Vcc:电源
GND:地线
CLK:时钟信号
芯片的真值表也是很重要的
真值表可以让我们编写程序来操作芯片工作
仿真部分
仿真使用的是Prot ...
【CTF&WriteUP&Re】2022强网杯 ”Reverse“ WriteUp
2022强网杯 ”Reverse“ WP
Reverse
1.【game】
考点
Android逆向分析, Android网络请求,Web数据
解法
下载程序解压,发现是"ab"结尾的文件推测是安卓备份文件,用010Editor打开看一下,发现有明显的标识 ”ANDROID BACKUP“ 。
直接用android-backup-extractor提取出数据
提取之后发现有两个文件其中一个是apk文件直接用Jeb打开apk安装包
打开Manifest清单文件找到启动Act直接双击,tab键转成Java代码
根据Android生命周期可以知道onCreate是第一个启动的函数,直接找onCreate函数
经过分析发现在App启动的时候会自动登录,如果登陆失败则会跳转到LoginAct,否则跳转到MainAct
本想跟进autoLogin查看是如何登录的,结果发现了关键字眼函数”getFlag“
那就先分析getFlag,发现需要传入三个参数然后通过发包获取Flag。根据后面的Api.class发现远程文件名
文件名搞到手了 ...
【Git】Git命令大全
Git命令大全
配置
123456789101112131415161718192021git init # 初始化本地git仓库(创建新仓库)git config --global user.name "xxx" # 配置用户名git config --global user.email "[email protected]" # 配置邮件git config --global color.ui true # git status等命令自动着色git config --global color.status autogit config --global color.diff autogit config --global color.branch autogit config --global color.interactive autogit config --global http.proxy "socks/http:host:port"git config --global https.proxy "socks/htt ...
【CMake&C&CPP】CMake的安装及使用
CMake
说明
cmake的定义是什么 ?-----高级编译配置工具
当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了-----CMake!
所有操作都是通过编译CMakeLists.txt来完成的—简单
官方网站是 www.cmake.org,可以通过访问官方网站获得更多关于 cmake 的信息
学习CMake的目的,为将来处理大型的C/C++/JAVA项目做准备
CMake安装
Windows安装
到https://cmake.org/download/下载对应的Cmake安装程序安装
使用VS Studio
在安装VS Studio的时候选择单个组件,分别安装下列的组件
SDK选择一个安装即可
也是选择任意一个安装即可
添加用于编译 “.sln” 文件的MSBuilder到环境变量中
1C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin
输入cmake -h查看目前有哪 ...
【CTF&WriteUp】2022-07 “强国杯” WriteUp含Re
战队名:超级飞侠
撰写时间:2022-07-16 20:43
强国杯【线上-2022】
I. WEB
【upload_lol】
考点
上传绕过
解法
经过多次测试发现,文件后缀不能带有php,文件内容不能有<? ,而?>这个好像没有过滤,文件类型改为image/jpeg即可;所以先上传一个.htaccess,内容为
12AddType application/x-httpd-php .jpgphp_value auto_append_file "php://filter/convert.base64-decode/resource=shell.jpg"
然后在shell.jpg文件里面写入base64加密过的一句话木马
蚁剑连上在var目录下得到flag
【file_sql_new】
考点
字符型注入
过滤绕过
解法
字符型注入,过滤了select,会替换为空,双写select绕过,回显2、3字段
爆表名
爆列名
获取flag路径
使用load_file读取flag
II. MISC
【we ...
【CTF/WP/Crypto】第二届广东大学生网络安全攻防大赛
Crypto-xor2
程序分析
”轮环异或加密,你能解开么?格式:flag{}“
文件下载有一个py文件和一个文本文件
从描述可得知就是一个异或加密
从图中分析得知密钥是四位的密钥且不知道,然后flag也不知道。基本上无解了
But!!!从描述中可知flag前四位是"flag"又是异或加密。异或有个特性就是异或两次等于原文那么是不是可以利用给出的前四个flag进行key的解密呢
解密脚本编写
123456789101112131415161718# 从cipher中整理得到的数据 encData = [ 0x1E, 0x14, 0x19, 0x1F, 0x03, 0x1E, 0x1B, 0x1B, 0x1A, 0x48, 0x4E, 0x4E, 0x4D, 0x55, 0x1A, 0x1B, 0x1D, 0x4D, 0x55, 0x1C, 0x4B, 0x4A, 0x41, 0x55, 0x19, 0x1B, 0x19, 0x4F, 0x55, 0x41, 0x41, 0x49, 0x4F, 0x41, 0x1A, 0 ...
【CTF&Re&WriteUp】第二届广东大学生网络安全攻防大赛ReWP
LUOJIABASUO
半个月前参加了一场比赛,我主要是负责的Re但是只解出了一个比较简单的那就是Pyre其他的我打开来看了一下就关了甚至没调试。后来发现还是挺简单的一个题目
RE
反调试
首先老规矩IDA打开静态分析看看,发现压根无法分析。主要是这里使用了虚表调用。虚表调用的子程序(函数)是在每次运行的时候才计算出来子程序的地址。这导致IDA分析的时候是无法对齐静态的分析的。所以
按照老规矩动态调试挂起来,发现IDA没有控制权无法控制程序当程序运行起来的 时候没有响应切不能在IDA结束远程的调试目标。那说明存在反调试。
如何寻找反调试的地方在哪呢?也挺简单的只要在入口处下个断点不断的运行程序看看哪里IDA没有控制权了那么说明该地方具有反调试
要注意的 是main函数不是最开始的入口,”__scrt_common_main_seh“ 这个子程序才是最开始执行的
引用来自https://www.dazhuanlan.com/relic256/topics/1212274
虽然 VS 系列入口函数均为mainCRTStartup,但不同版本的实现仍然有些许不同。 在 ...