计算机程序可以认为就是处理输入数据然后输出处理结果,这中间就涉及到数据的传递处理,比如内存拷贝操作,字符串拷贝操作等等,而任何一个处理操作不当就可能导致程序异常崩溃,或者遭受其他恶意攻击,这就需要对这些数据操作异常小心。
数据的操作自然离不开 C 库函数了,如 memcpy、strcpy 等等。这些函数如果使用不当,则是很危险的,比如 memcpy 拷贝的长度实际大于目标长度,这就造成内存越界了。
而业界也有针对此类接口进行二次封装修改,以减少内存越界等这种错误的可能性,比如思科的 safec 库,都以原 C 库接口名加后缀 _s 命名作为替换,如 memcpy_s。下面就简单说下 safec 库的编译操作,具体接口使用说明可以直接看代码。
safeclib 其对应的 github 地址:
https://github.com/rurban/safeclib
然后下载了当前较新的版本 safeclib-3.6.tar.gz,根据 README 说明文档,构建操作如下:
./build-aux/autogen.sh
./configure
make
但实际执行时出现如下错误:
➜ safeclib-3.6 ./build-aux/autogen.sh
fatal: not a git repository (or any of the parent directories): .git
说明文档给出了对应的提示
autogen.sh
only needs to be run if you are building from the git
repository.
就通过 git clone
操作下载了源码
git clone https://github.com/rurban/safeclib.git
再执行 ./build-aux/autogen.sh
命令就可以生成 configure 脚本文件了,不知道之前下载的压缩包源码要咋编译~
然后执行 configure 脚本生成 Makefile 文件
./configure CFLAGS="-fPIC" CC=arm-linux-gnueabihf-gcc --disable-extensions --disable-constraint-handler --prefix=`pwd`/install_dir -host=arm-linux
选项 --disable-extensions
和 --disable-constraint-handler
则是为了减少库大小。
随后 make;make install
即可完成编译安装