自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (6)
  • 收藏
  • 关注

原创 UDP send 出现大量“Resource temporarily unavailable”

至此,我们已经分析开头所说困惑,一个小小的“Resource temporarily unavailable”错误,背后蕴藏着太多技术细节,如果得过且过将来必成后患。工作中遇到的每个小问题,背后都蕴藏着大量知识,只有平时多积累总结,才能游刃有余解决所面对的问题。

2024-03-28 18:10:13 742

原创 数据报文去哪儿了

经过分析我们可以总结我们遇到的问题,1,通过scapy打流测试,为什么bpftrace没有捕获到大量的kfree_skb事件?这是因为网卡工作在直接模式(Direct Model)网卡将目的MAC不是自己的直接丢弃,验证这个想象,可以直接使用tcpdump 工具抓包,此时bpftrace 可以捕获大量的kfree_skb事件。2,tcpdump 捕获到去往自己IP的报文,为什么没有到netfilter框架?

2023-11-23 17:08:00 309

原创 GCC 查看编译和链接搜索路径

当我们使用交叉编译工具时,总是出现无法找到头文件或者链接库的问题,一般都是编译工具环境问题,我们可以采用以下方式查询当前头文件或者链接库搜索路径。编译头文件搜索路径:echo "" | gcc -v -x c -E -gcc -v -x c -E empty.c链接库搜索路径:ld --verbose | grep SEARCH | sed 's/;[ ]/\n/g'SEARCH_DIR("/usr/x86_64-linux-gnu/lib64")SEARCH_DIR("=/u

2022-04-22 09:49:57 2151

转载 利用nf_conntrack机制存储路由,省去每包路由查找

IP是无连接的,因此IP路由是每包一路由的,数据包通过查找路由表获取路由,这是现代操作协议协议栈IP路由的默认处理方式。但是如果协议栈具有流识别能力,是不是可以基于流来路由呢?答案无疑是肯定的。设计思想在Linux的实现中,nf_conntrack可以做到基于流的IP路由,大致思想就是,仅仅针对一个流的第一个正向包和第一个反向包查找标准的IP路由表,将结果保存在conntrack项中,后续的属于同一流的数据包直接取出路由项来使用。背后的思想是:这可以省去查找路由表的开销,是这样吗?也不全是!关键是,将一

2021-07-22 16:50:38 539

转载 如何扩展Linux的ip_conntrack

Linux中有一个基于Netfilter的连接跟踪机制,即ip_conntrack,每一个conntrack表示的就是一个流,该流里面保存了大量的信息字段,这些字段本地有效,指导着数据包的转发策略,但是我觉得这些字段信息还不够详细,试想,一个nfmark字段好像就可以做到一切了,但是我如果想为一个数据流绑定一个字符串怎么办呢?也许你会说使用iptables+ipset+nfmark可以完成一切,这也是UNIX/Linux哲学的风格,一种后现代主义的风格,但是最近我上了不归路,非要在ip_conntrack里

2021-07-22 15:54:23 242 1

转载 拆解 Linux 网络包发送过程

转载文章:https://mp.weixin.qq.com/s/rpEoQT0aVbJqiaB_2XWVmQ大家好,我是飞哥!半年前我以源码的方式描述了网络包的接收过程。之后不断有粉丝提醒我还没聊发送过程呢。好,安排!在开始今天的文章之前,我先来请大家思考几个小问题。 问1:我们在查看内核发送数据消耗的 CPU 时,是应该看 sy 还是 si ? 问2:为什么你服务器上的 /proc/softirqs 里 NET_RX 要比 NET_TX 大的多的多? 问3:发送网络数

2021-05-13 08:32:25 527

原创 一个历史遗留问题,引发的linux内存管理的‘血案’

最近处理一个骨灰级历史残留问题,内核模块DPI的内存数据被无故关顾,导致系统的panic的问题,linux 内核版本3.18 x86_64,由于我们要精简系统,许多调试工具已经被阉割,SLAB_DEBUG, KASAN not support, 由于这部分数据主要是查询,在初始化话不会对其进行修改,所以想到一个办法将初始化完DPI后,将使用的内存页设置为只读,通过stack的信息找到元凶。按照以上的分析总共分为以下步骤:查找 虚拟地址的PTE 设置PTE的属性为只读#include <l

2021-04-22 16:51:30 602

原创 linux 内存显示括号内字母的含义

当linux系统发生异常或者 echo 'm' > /proc/sysrq-trigger 我们会看到类似以下的信息,其中括号内字符代表什么含义呢?我们跟踪 sysrq-trigger,看看源码的解释DMA: 1*4kB (M) 0*8kB 1*16kB (M) 2*32kB (UM) 2*64kB (UM) 1*128kB (U) 2*256kB (UM) 2*512kB (UM) 1*1024kB (M) 1*2048kB (M) 2*4096kB (ER) = 13140kBDMA32:

2021-04-08 11:47:01 455

原创 CPU 乱序执行验证

受到一个问题:linux kernel 为什么加 smp_mb,怎么引起的,添加后有怎么解决的?最近遇到CPU的乱序问题,总是理论性的东西和讨论,找了个时间写了测试程序,验证CPU乱序执行的存在,理论加实践,才能理解的更加深刻/* this program test CPU out of order execute. ENV: CPU need more than two core thread gcc -Wall -O3 out_of_order

2021-03-24 17:47:44 427

转载 25匹马,找出最快的3匹,但是只有5个赛道,每次比赛只能得到5匹马的速度排序,那么最少需要多少次比赛

笔试题:25匹马,找出最快的3匹,但是只有5个赛道,每次比赛只能得到5匹马的速度排序,那么最少需要多少次比赛在网上搜了下答案,好像不靠谱。最后在英文网站上找到正确的答案:? 次参考:http://www.programmerinterview.com/index.php/puzzles/25-horses-3-fastest-5-races-puzzle/1-5 场:将25匹马...

2019-10-23 08:45:30 2158

原创 低版本ulibc支持recvmmsg sendmmsg功能

最近调试openwrt,发现低版本的ulibc不支持recv/send mmsg API,故简单写个实现一个测试程序,直接贴代码吧!,这里的程序可能兼容新版版本的ulibc出现问题,所以使用wrap_简单封装一下。#define _GNU_SOURCE#include <netinet/ip.h>#include <stdio.h>#include <st...

2019-07-03 11:09:39 791

转载 shell逐行读取每一列

在Linux下用shell脚本读取MySQL结果集各数据项的值,按行读取sql结果,将sql执行结果读取到shell变量中,然就可进行处理。方法一:while read -a rowdo    echo “.. row[0].. {row[1]}..”done&lt; &lt;(echo “select  id ,name  from  student;” | ${COMMAND1})方...

2019-02-27 11:41:06 2968

转载 AR/QCA SPI 启动原理和 ART 地址定位原理

转自:http://www.right.com.cn本贴主要讲解 Bootloader 是如何在使用 SPI Flash 的 AR/QCA 的芯片上启动的,以及 OpenWrt 代码 ar71xx 的 mach 文件中类似于 u8 *art = KSEG1ADDR(0x1fff0000) 中 0x1fff0000 是如何得来的。楼主之前在 U-Boot 编译教程中进行过简单的描述,但是

2018-01-17 14:58:33 1906

转载 shell中的各种括号的使用方法

from:http://www.jb51.net/article/60326.htm在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下:1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string},${var:=string},${var:?string} 5.$((exp))

2017-11-24 09:08:38 304

转载 linux glob函数详解

glob库函数用于Linux文件系统中路径名称的模式匹配,即查找文件系统中指定模式的路径。注意,这不是正则表达式匹配,虽然有些相似,但还是有点差别。glob函数原型       #include        int glob(const char *pattern, int flags,                           int errfunc(cons

2017-07-13 18:00:51 13823

转载 IPC之IPC_PRIVATE与ftok比较

在Linux中,可以使用IPC对象来进行进程间通信。IPC对象存在于内核中,多进程可以操作同一个IPC对象。每个IPC对象都有一个唯一的编号,该编号是由系统分配的。那么不同的进程如何知道这个编号,进而通过它进行通信呢?下面以共享内存为例,进行分析。方法一:通过ftok函数,产生相同的键值。假设,进程p1创建了共享内存。可以在创建时,调用ftok函数,得到一个key值,调用s

2017-03-06 07:07:45 1099

转载 Ubuntu14.04 YouCompleteMe Configure

安装准备1.1 安装vim[cpp] view plaincopysudo apt-get install vim  1.2 安装cmake[cpp] view plaincopysudo apt-get install cmake  1.

2016-01-09 12:34:38 1804

原创 结构体对齐详解

一、字节对齐的规则:1、一般设置的对齐方式为1,2,4字节对齐方式。结构的首地址必须是结构内最宽类型的整数倍地址;另外,结构体的每一个成员起始地址必须是自身类型大小的整数倍(需要特别注意的是windows下是这样的,但在linux的gcc编译器下最高为4字节对齐),否则在前一类型后补0;这里特别提到的是数组一定要注意,而且在一些编程的技巧中,我们可以使用数组强制字节达到对齐的目的。这在网络

2014-11-17 16:27:19 5399

转载 单链表反转 c实现

http://blog.csdn.net/niuer09/article/details/5961004

2014-11-07 11:32:36 877

转载 同一进程中同一端口如何区分不同的Socket

为了区分不同应用进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP 或 UDP)和使用的端口号。    Socket的原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。    accept()产生的Socket端口号是多少?

2014-08-29 17:58:42 10371 4

转载 select 详解

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式

2014-08-29 17:11:34 1096

转载 子网掩码详解分析

一、 子网掩码的概念及作用  子网掩码 (subnet mask) 又叫网络掩码、地址掩码、子网络遮罩,是一个应用于 TCP/IP 网络的 32 位二进制值。它可以屏蔽掉 IP 地址中的一部分,从而分离出 IP 地址中的网络部分与主机部分,基于子网掩码,管理员可以将网络进一步划分为若干子网。它必须结合 IP 地址一起使用。二、 为什么需要使用子网掩码  虽然我们

2014-08-20 15:14:55 845

转载 scanf family API 高级用法

如何解释 fscanf(fd,"%*[^\n]")"%[^\n]"表示读输入字符串,直到碰到字符‘\n’为止,其中^表示否的意思sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。 1. 常见用法。 以下是引用片段:   cha

2014-08-08 14:48:56 592

转载 IO多路复用之select篇

1、基本概念  IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:  (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。  (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。  (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。

2014-06-05 19:18:52 654

原创 Vim 高亮显示单词并查找

按住 shift + "*"

2014-06-05 10:10:01 18609 4

原创 多工作线程获取工作队列简单实现

学习APUE,知识发现收获不少,

2014-05-27 16:34:57 685

转载 EIP寄存器

EIP寄存器,用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令。每次CPU执行完相应的汇编指令之后,EIP寄存器的值就会增加。 一、因为80386 CPU的寻址范围是4GB,所以它的寻址模式是平坦模式的。CPU通过读取EIP寄存器执行汇编指令的大致过程如下:1. 首先PE loader装载我们的PE文件,读取PE文件的基地址和入口RVA地址(相对于基地址的偏移

2014-05-14 14:53:19 21530 1

原创 Push, Pop, call, leave 和 Ret 指令图解

帧栈结构图:最近在研究如何在程序crash定位出错函数,补充的计算机系统基础知识。此篇主要是介绍IA32中帧栈结构(frame stack).

2014-05-14 14:32:27 62080 5

原创 IA32中栈帧结构图

zhenz

2014-05-12 18:41:23 1884

原创 strtok_r 和 strsep 使用实例

这两个函数都是拆分字符的API,douzhi

2014-05-12 11:25:25 2344

原创 常用寄存器及其说明

通用寄存器EAX累加(Accumulator)寄存器AX(AH、AL)常用于乘、除法和函数返回值EBX基址(Base)寄存器BX(BH、BL)常做内存数据的指针, 或者说常以它为基址来访问内存.ECX计数器(Counter)寄存器CX(CH、CL)常做字符串和循环操作中的计数器

2014-05-09 18:48:28 6923

转载 浅谈malloc,calloc,realloc函数之间的区别

内存区域可以分为栈,堆,静态存储区和常量存储区。局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取的方式都是由编译器自动执行的。      C 标准函数库提供了许多函数来实现对堆上内存管理,其中包括:malloc函数,free函数,calloc函数和realloc函数。使用这些函数需要包含头文件stdlib.h1.   malloc函数malloc函数可以从堆上获得指定字节的内

2014-05-09 18:37:55 577

转载 AT&T汇编leave指令

最近在看c程序的编译出来的汇编文件,发现涉及到函数调用的地方,在返回时有的时候使用的leave,有的时候直接使用的是popl %ebp。在AT&T汇编中,leave等效于以下汇编指令:movl %ebp, %esppopl %ebp为什么有的时候会使用leave,有的时候直接使用popl %ebp?这个问题一开始我也没搞懂,后来通过分析堆栈才有点清醒。二者的差别就在于是否使用

2014-05-07 15:13:02 7097 1

原创 Linux 读取文件n行并删除方法

最近工作中读到对AC或者AP产生的

2014-05-05 18:29:03 2890

原创 Vim skills

记录工作常用的vim使用命令和jiq

2014-05-05 11:27:01 567

转载 嵌入式LINUX环境下视频采集知识

Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。一、Video for Linux two  在Linux下,所有外设

2014-02-12 17:28:22 3204

转载 SYSCALL_DEFINE含义

CVE-2010-3301是其中一个。这个漏洞的成因是,在64位的内核上执行32位的系统调用时,作为传递系统调用号的%rax高32位未被清零处理,而且在进行比较的时候直接使用的%eax,导致高32位被忽略:cmpl $(IA32_NR_syscalls-1),%eax ja ia32_badsys ia32_do_call: IA32_ARG_FIXUP call *ia32_sys_

2014-01-14 09:55:37 778

转载 linux下的系统调用函数到内核函数的追踪

Original from: http://blog.chinaunix.net/uid-28458801-id-3468966.html使用的 glibc : glibc-2.17使用的 linux kernel :linux-3.2.07系统调用是内核向用户进程提供服务的唯一方法,应用程序调用操作系统提供的功能模块(函数)。用户程序通过系统调用从用户态(user mod

2014-01-13 11:03:20 927

原创 Linux/Unix the definition of cpu-nice

这是个Linux/Unix术语。Linux/Unix 是多用户分时操作系统,一个主机上连很多用户。nice是一种礼让的工具,可以给自己不着急出结果的程序安排优先级(除了管理员,别人只有增加的权利——表示优先级的数字,默认是0,越大优先级越低)。比如压缩片子的进程,可以用活动监视器看进程号,然后到终端下输入renice 20 -p 进程号,就不会影响到其他操作了。当然,在你什么都不做的时候,cp

2013-05-18 10:15:26 618

转载 RedHat YUM configure

RedHat企业版免费使用的用户,大家都知道,他的服务是收费的,没有注册码是不提供服务的,包括yum服务,这里如果我们非要使用Redhat 企业版的话,为了方便管理,我们自己搭建本地YUM,步骤如下:1,创建存放RPM包源的目录mkdir -p /usr/local/src/yum2,挂载安装盘mount /dev/cdrom /mnt3,复制所有安装里的RPM包到

2013-04-16 11:07:06 1153

c语言教程和一些资料

c语言教程和一些资料 c powerpc IIC

2012-07-31

操作系统原理及应用(LINUX).pdf

操作系统原理及应用(LINUX)初级. 操作系统原理及应用(LINUX)

2011-11-11

LINUX内核源代码情景分析(下).pdf

LINUX内核源代码情景分析(下).pdf LINUX内核源代码情景分析(下).pdf

2011-11-10

Linux内核源代码情景分析(上).pdf

Linux内核源代码情景分析(上).pdf

2011-11-10

UNIX环境高级编程第二版.pdf

UNIX环境高级编程第二版.pdfUNIX环境高级编程第二版.pdf

2011-11-10

C++程序员应聘常见面试题深入剖析

C++程序员应聘常见面试题深入剖析.pdf

2011-11-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除