1. 开发安全的程序
大部分的溢出攻击是由于不良的编程习惯造成。现在常用的C和C++语言因为宽松的程序语法限制而被广泛使用,它们在营造了一个灵活高效的编程环境的同时,也在代码中潜伏了很大的风险隐患。
为避免溢出漏洞的出现,在编写程序的同时就需要将安全因素考虑在内,软件开发过程中可利用多种防范策略,如编写正确的代码,改进C语言函数库,数组边界检查,使堆栈向高地址方向增长,程序指针完整性检查等,以及利用保护软件的保护策略,如StackGuard对付恶意代码等,来进行保证程序的安全性。
2024年10月18日
1. 开发安全的程序
大部分的溢出攻击是由于不良的编程习惯造成。现在常用的C和C++语言因为宽松的程序语法限制而被广泛使用,它们在营造了一个灵活高效的编程环境的同时,也在代码中潜伏了很大的风险隐患。
为避免溢出漏洞的出现,在编写程序的同时就需要将安全因素考虑在内,软件开发过程中可利用多种防范策略,如编写正确的代码,改进C语言函数库,数组边界检查,使堆栈向高地址方向增长,程序指针完整性检查等,以及利用保护软件的保护策略,如StackGuard对付恶意代码等,来进行保证程序的安全性。
2024年10月18日
调试程序时候常用printf来作为调试日志输出,方便定位问题所在位置。但最近出现一个现象程序运行过程中会出现莫名的异常死机。
但是在死之前有个征兆,观看打印的日志,有两条信息穿插打印的现象。所以才想起来去考虑是不是printf引起的。
在整个项目中我运行的有8个任务,而在每一个任务里面几乎都会有使用printf进行调试信息打印。所以从开始就埋下了一颗定时炸弹。只是要碰下运行,运气好的时候一切风平浪静。运气不好的时候就炸的异常到处横飞。
在看下自己代码printf重映射的fput接口用的还是HAL_UART_Transmit 阻塞发送函数接口。这样在波特率为115200的情况下,假如打印一条200bytes的日志信息就要约等于19ms的时间。这岂不严重影响其他任务的实时性。
2024年10月18日
打印输出等级控制,方便调试及发布版本,我们在编写代码时经常要看一些打印信息,但是发布版本的时候,又不能有太多无关打印,加了打印,又一个一个删除十分浪费时间,且下次又需要增加,因此需要一些小技巧进行控制输出的打印等级。打印的信息里可以包含出错所在行号,出错所在函数,甚至时刻信息等。
2024年10月18日
当初大家入门学习C语言的时候,面对一个黑黑的命令行界面,仅有的交互方法只有printf/scanf这两个函数作为输入输出。但是,大家知道吗?这两个函数后面还有很多兄弟姐妹。那就是C语言的格式化输入输出函数,这些函数就定义在我们熟悉的stdio.h头文件中。
我们先来简单看一下他们的函数原型吧。
int fprintf ( FILE * stream, const char * format, ... );
int fscanf ( FILE * stream, const char * format, ... );
int printf(const char *, ...);
int scanf(const char *, ...);
int sprintf(char *, const char *, ...);
int sscanf(const char *, const char *, int ...);
int vfprintf(FILE *, const char *, va_list);
int vprintf(const char *, va_list);
int vsprintf(char *, const char *, va_list);
2024年10月18日
来源:百问网_嵌入式Linux wiki_jz2440 新1期视频维基教程 (视频文字版)
作者:韦东山
本文字数:2725,阅读时长:3.5分钟
第018课 ADC和触摸屏 第006节_触摸屏编程_ADC中断
2024年10月18日
计算机的核心就在于用数据来模拟事物,数据和处理数据的代码输入并存储到内存,处理后产生输出。
数据的输入可以来源于键盘、扫描仪、磁盘文件、控件,字符串缓存、网络连接设备(文件)。
数据的输的去向可以是显示屏、打印机、磁盘文件、控件,字符串缓存、网络连接设备(文件)。
2024年10月18日
通常,输入输出的主体是内存,输入是指输入到内存变量(变量存储在内存中),输出是指从内存变量输出。
另外,输入输出通常是指设备文件与内存的交互。设备文件可以是键盘、显示器等标准设备文件,也可以是磁盘文件,甚至另一块内存。
还有,设备文件与内存的交互,通常因为效率的考量,并不是直接的交互,通常以缓存(也是一块内存)为中介。
也可以描述为:
2024年10月18日
cout 和 printf 是 C++ 中常用的两种输出方式,它们各有优缺点和适用场景。以下是它们的主要区别: