C语言
天麓
很懒的码农
展开
-
ARM 反汇编
~/c_program/test$ cat test.c#include <stdio.h>long user_add(long x, long y){ long z = x + y; return z;}long main(long argc, char **argv){ long x = 5; long y = 6; long z = user_add(x, y); return 0;}gcc -g test.c -o testobjdump -D .原创 2022-01-27 16:25:39 · 807 阅读 · 0 评论 -
驱动设计原则之一 打印日志的平衡
部分芯片提供错误检测寄存器,需要定时轮询,如果发现错误上报错误告警。驱动应该在发现错误的时候把完整的寄存器以及相关联的寄存器都打印出来,便于甄别是否是真的硬件故障。防止海量打印,可以通过状态位变化标记决定是否打印信息。state_flag = 0;//初始状态func(){get_state(&new_state_flag);if (state_flag != new_st...原创 2021-09-27 13:20:05 · 83 阅读 · 0 评论 -
linux timerfd系列函数学习笔记2 获取超时次数
基于笔记1的代码#include <stdlib.h>#include <math.h>#include <stdio.h>#include <errno.h>#include <error.h>#include <unistd.h>#include <sys/timerfd.h>#define ONE_BILLION 1000000000 // 1slong long period_ns = 100原创 2021-09-13 17:31:08 · 179 阅读 · 0 评论 -
linux timerfd系列函数学习笔记1 获取电脑从启动到当前的运行时间
C码获取电脑从启动到当前的运行时间#include <stdlib.h>#include <math.h>#include <stdio.h>#include <errno.h>#include <error.h>#include <sys/timerfd.h>int main(int argc, char *argv[]){ int err; struct timespec expected; int原创 2021-09-13 15:00:40 · 137 阅读 · 0 评论 -
sourceinsight使用
source insight 函数名出现乱码的解决办法https://blog.csdn.net/joqian/article/details/12650207原创 2021-02-16 22:16:20 · 88 阅读 · 0 评论 -
C对象化
C对象化C++有编译器帮助,对象通过this体现;C语言只能靠自己,一般第一个参数就是对象,例如int wake_up_process(struct task_struct *p)面向对象的好处: 不用考虑与对象无关的状态; 有利于单元测试。 OOD:面向对象分析和建模,不过时。特殊的对象,通过派生类解决。例如:struct animal { enum type; funcBark bark; void *extension; =>弱类型,...原创 2020-09-05 23:36:18 · 6968 阅读 · 0 评论 -
编译链接学习笔记1
Last login: Sat Aug 15 22:10:42 2020 from 192.168.1.5[zl@cliffr ~]$ suPassword:[root@cliffr zl]# /sbin/service smb statussmbd is stopped[root@cliffr zl]# /sbin/service smb startStarting SMB services: [ OK ][root@cliffr zl]# /sbin/service smb stat...原创 2020-08-22 07:52:56 · 610 阅读 · 0 评论 -
c语言位域分配原则
bit field的分配原则:bit field从左到右依次分配到RAM的低地址的低bit。little endian时,方式如下:0bit -------------> 31bitbig endian时,方式如下:31bit -------------> bit0Re: macro BITS_BIG_ENDIAN (re send)https://gcc.gnu.org/legacy-ml/gcc/2004-09/msg00581.html...原创 2020-08-15 21:34:25 · 416 阅读 · 0 评论 -
微视linux 进程的当前目录
先做一个实验创建一个死循环小程序[zl@localhost test]$ pwd/home/zl/test[zl@localhost test]$ vi test.c#include <stdio.h>int main(int argc, char *argv[]){ while (1){ sleep(1); } return 0;}[zl...原创 2020-01-12 12:03:10 · 287 阅读 · 0 评论 -
linux动态库学习
Linux动态库原理(二)重定位https://blog.csdn.net/hpp24/article/details/52191247Linux动态库加载函数dlopen源码梳理(一)https://blog.csdn.net/SweeNeil/article/details/83744843https://blog.csdn.net/SweeNeil/article/deta...转载 2019-07-28 09:54:06 · 125 阅读 · 0 评论 -
编写安全的程序 入参判断
命令行输入读取文件网络消息原创 2018-12-23 07:19:27 · 267 阅读 · 0 评论 -
C语言学习 整型和指针的转换
uintptr_t num = (uintptr_t)addr_x;原创 2018-12-21 07:16:03 · 1421 阅读 · 0 评论 -
补丁的原理
比如要对A函数打补丁,A函数修改完为B;而A的调用者为C,D,E和F 打补丁时直接把C,D,E和F里面A修改成B是不太现实的。 可以这样处理。在A函数第一条指令前加一条异常(非法)指令。 当C调用A时,会触发SIGILL异常信号,在SIGILL信号异常处理函数里面修正C里面A的地址为B,并执行B。这样C第二次调用A的时候地址已经修改成了B。D,E和F也是同理,第一次修正执行,后续直接执行。...原创 2018-02-24 22:09:01 · 6367 阅读 · 0 评论 -
梳理的比较好的博客,包括嵌入式 安卓和AI等
http://www.cnblogs.com/sky-heaven/category/636017.html转载 2018-04-18 07:39:16 · 149 阅读 · 0 评论 -
程序员的修炼等级,自己是哪一等级呢
第一等级:打酱油,别人让干什么就干,不会就问;第二等级:功能实现,根据设计文档写代码,外事不决谷歌,内事不决度娘;第三等级:代码简洁性和可维护性;第四等级:可测试性、可靠性和性能;第五等级:可扩展性+设计模式;第六等级:深入理解底层的实现以及为什么这么实现;第七等级:分析新需求的价值、风险以及工作量...原创 2018-05-06 22:32:00 · 231 阅读 · 0 评论 -
linux内核嵌入式汇编
之三:三步法解析内核中的嵌入式汇编https://blog.csdn.net/stillvxx/article/details/40707333Linux内核中的汇编语言https://blog.csdn.net/liu0808/article/details/54923555转载 2018-05-15 07:25:01 · 290 阅读 · 0 评论 -
gdb调试
进程出现异常,IP指针的值为0xXXXXXXXX。可以通过gdb调试找到出问题的地方gdb attach 进程号gdb x /li 0xXXXXXXXX这时能够显示出现问题的函数名字,例如 test_func这时 gdb b test_func打断点然后 gdb c继续执行执行到test_func后gdb bt能够打印出出现问题的调用栈...原创 2018-05-23 07:34:44 · 129 阅读 · 0 评论 -
进程调度之wait
核心思想:回收子进程描述符//wait_task_zombie和wait_task_continued回收子进程描述符(注销身份证),子进程彻底消失do_wait =>add_wait_queue(¤t->signal->wait_chldexit,&wait); =>repeat: current->state = TASK_INTERRUPTIBL...原创 2018-07-08 22:49:45 · 293 阅读 · 0 评论 -
linux内核定位方法总结1 ECC hung-task和原子操作 反汇编调用栈
1 CPU支持ECC的话打开ECC,并且在系统异常中断的时候打印出来,因为内存多bit ECC会导致系统异常。MCHECK_EXCEPTION(0x200, Machine, machine_exception) =>static struct cpu_spec __initdata cpu_specs[] /* e500v2 */ .machine原创 2017-06-13 07:31:55 · 711 阅读 · 0 评论 -
慢慢欣赏linux x86 uImage实模式启动
header.S (c:\linux\linux-2.6.23\arch\i386\boot) //在X+0x9000+512的位置,也就是X+0x20:0x90000处的位置 # offset 512, entry point .globl _start_start: =>.byte 0xeb # short (2-byte)...原创 2018-08-19 10:04:32 · 331 阅读 · 0 评论 -
慢慢欣赏linux x86 int指令
int指令(软件中断指令)https://www.cnblogs.com/icqw/p/4915930.html原创 2018-08-29 06:54:46 · 1484 阅读 · 0 评论 -
嵌入式面试题
想成为嵌入式程序员应知道的0x10个基本问题http://blog.chinaunix.net/uid-22666248-id-34751.html原创 2018-10-18 23:57:02 · 156 阅读 · 0 评论 -
glibc的临界区保护方法
posix多线程有感--自旋锁http://blog.chinaunix.net/uid-28711483-id-4995776.html原创 2018-11-01 23:46:02 · 171 阅读 · 0 评论 -
likely和unlikely学习
用于性能优化,有点类似于赌博很可能发生的事情概率很大时就赚了,否则赔了。没有得了便宜还卖乖的事情likely类似于看多;unlikely类似于看空。参考文章:详解likely和unlikely函数http://blog.csdn.net/zzsfqiuyigui/article/details/7661412原创 2018-01-28 12:24:16 · 302 阅读 · 0 评论