
C Program Language
文章平均质量分 67
fengzhishang_meteor
吾生也有涯,而知也无涯
展开
-
__stack_chk_fail问题分析
再说一下,canary破坏很大可能是memset memcpy越界修改造成的,而且是栈中的变量,如下static概率就比较小,因为static变量不在栈中,所以,大概率是tmp这个数组。,canary存放位置如下,如果func1函数中有越界操作,很可能会修改到canary,stack_chk_fail检测canary就会失败。所以大概率问题出现在32行的memcpy,p2-p1可能越界了,因为tmp与stlog大小一样,tmp在开头加了一断字符,p2-p1+l。发生了缓冲区溢出,canary被破坏。原创 2023-02-24 12:00:06 · 2346 阅读 · 0 评论 -
gcc 库的链接顺序问题
gcc 库的链接顺序问题前言最近MIPS上开发一个程序,需要用到浮点运算。写好bootloader,main函数,在main函数调用log浮点运算,包含math库。然后再写好makefile,ld脚本。gcc的参数用到了:CFLAGS= -c -march=3081 -msoft-float -fno-inline $(ENDIAN) -G0ld的参数用到了:LDFLAGS= -march=30...转载 2018-04-27 15:08:52 · 996 阅读 · 0 评论 -
Linux C语言检查进程是否存在
使用C语言根据进程名检查进程是否存在,然后重启进程/** COPYRIGHT NOTICE* Copyright (C) 2016 HuaHuan Electronics Corporation, Inc. All rights reserved** Author :Kevin_fzs* File Name :/home/kevin/wo原创 2016-08-15 09:13:37 · 9728 阅读 · 0 评论 -
Linux信号列表与发送信号
http://blog.youkuaiyun.com/baobao8505/article/details/1115820我们运行如下命令,可看到Linux支持的信号列表:$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS转载 2016-08-19 14:13:38 · 1141 阅读 · 0 评论 -
Linux内核中文件操作函数整理
1.判断文件是否存在struct file *filp = NULL;filp = filp_open("/etc/passwd", O_RDONLY, 0);if (IS_ERR(filp)) { printk("Cannot open ......\n");}2.根据描述符查找路径在Linux内核中,已知一个进程的pid和其打开文件的文件描述符fd,原创 2016-07-28 13:56:26 · 7363 阅读 · 0 评论 -
简单工程Makefile的自动生成
工程Makefile的编写,可以自己动手来写,也可以使用automake等工具来自动生成。下面还是以sort工程为例,对自动生成Makefle进行示例说明。预备知识: 运用GNU Autoconf 及 Automake 这两套工具,可以自动生成Makefile文件,并且让开发出来的软件可以像大多数源码包那样,只需"./configure", "make","make instal转载 2015-11-20 15:56:13 · 1173 阅读 · 0 评论 -
简单工程Makefile的编写
工程Makefile的编写,对于初始Makefile的菜鸟们来说,还是比较头疼的一件事情,如何做到整个工程结构清晰,各个模块相对独立,模块的添加 删除等都比较方便,各个层次的的Makefile风格一致,便于移植,这些并不容易。这里,就自己学习的一些体会,和大家分享一下。 本例工程,实现几种排序算法的具体代码实现和性能比较。工程结构如下:sort|-- Makefile|-转载 2015-11-20 15:54:17 · 709 阅读 · 0 评论 -
用程序求解多元一次方程
帮朋友写的一个类似解多元一次方程的小程序例如:141.72✘x+342.67✘y+97.29✘z+521✘w=26794根据商品单价和所有商品总价格求每种可以购买商品的数量商品种类不超过10种,有精确解就打印出来,没有精确解就打印最相近的由于不确定有几种商品,所以无法使用n个for循环(当然可以使用10个for,单价用0,感觉太繁琐)采用了递归的方法,具体见程序原创 2015-09-09 09:26:01 · 6339 阅读 · 1 评论 -
C语言中的#,##
今天在分析一份源码的时候遇到了如下代码:[cpp] view plaincopyprint?#define CASE(x,y) case x: _bsd_setlasterror(anApplInstance, BSD_ ## y); break 觉得其中的##很有意思,于是就将这个知识点整理一下。#和##都是预处理指令,转载 2015-09-09 09:16:22 · 713 阅读 · 0 评论 -
关于大小端的题目
有个问题是关于位字段 和 大小端的问题,是一个笔试题。C/C++ code?1234567891011struct stucA{ unsigned int a:1; unsigned int b:2; un原创 2015-04-21 17:03:03 · 1047 阅读 · 0 评论 -
GNU C中的零长度数组
在标准C和C++中,长度为0的数组是被禁止使用的。不过在GNU C中,存在一个非常奇怪的用法,那就是长度为0的数组,比如Array[0];很多人可能觉得不可思议,长度为0的数组是没有什么意义的,不过在这儿,它表示的完全是另外的一层意思,这个特性是不可移植的,所以,如果你致力于编写可移植,或者是稍稍需要跨平台的代码,这些Trick最好还是收起来的好。 在GNU的指南中,它是如此写道:转载 2014-12-25 11:25:12 · 685 阅读 · 0 评论 -
c语言中逗号运算符和逗号表达式
http://www.cnblogs.com/hnrainll/archive/2011/08/03/2126660.html C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如: 3+5,6+8称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为 表达式1,表达式2逗号表达式的求解过程是:先求解表达式1,再转载 2013-07-30 17:40:57 · 899 阅读 · 0 评论 -
const的记忆和使用方法
1.const的记忆和使用方法Const只是一个修饰符,不管怎么样a仍然是一个int型的变量constint a;int const a;constint *a;int * const a;int const * aconst;本质:const在谁后面谁就不可修改,const在最前面则将其后移一原创 2014-06-04 17:33:53 · 1171 阅读 · 0 评论 -
关于使用二级指针交换两变量的值
c语言中调用函数来交换两个变量的值,大家都知道要传入指针#include void swap(int *a,int *b){ int i= 0; i = *a; *a =*b; *b = i;}void main(){ unsigned int a=1,b =2; swap(&c,&d); printf("a is %d,b is %d\n",a,b);}原创 2015-01-06 17:21:12 · 2757 阅读 · 0 评论 -
透彻分析TLV数据保存
TLV格式是什么格式 ? 一种可变格式,TLV的意思就是:Type类型, Lenght长度,Value值; Type和Length的长度固定,一般那是2、4个字节; Value的长度有Length指定; 解析方法: 1.读取type 转换为ntohl、ntohs转换为主机字节序得到类型;指针偏移+2或4 2.读取lenght,转原创 2014-02-11 14:38:07 · 1908 阅读 · 0 评论 -
分析TLV数据保存
TLV格式是什么格式 ? 一种可变格式,TLV的意思就是:Type类型, Lenght长度,Value值; Type和Length的长度固定,一般那是2、4个字节; Value的长度有Length指定; 解析方法: 1.读取type 转换为ntohl、ntohs转换为主机字节序得到类型;指针偏移+2或4 2.读取lenght,转原创 2014-01-20 10:44:16 · 2089 阅读 · 0 评论 -
c语言中大小端的问题
一。记忆技巧正常情况下,内存地址都是从小到大排列的,记忆区分大小端的方法:高字节放在低地址就是大端,高对应大,低对应小二。判断编译器大小端方法1. short int x; char x0,x1; x=0x1122; x0=((char*)&x)[0]; //低地址单元 x1=((char*)&x)[1]; //高地址单元若x0=0x11,则原创 2013-12-05 16:14:23 · 1075 阅读 · 0 评论