
linux
狼群一一先锋
他日仙界如相见,一声道友尽沧桑。
展开
-
shell脚本常用
杂$0 脚本名$1 第一个参数awkcat data.txt | awk '{print $2}' #默认以空格为区分,打印第二列cat data.txt | awk -F'{2,}' '{print $3}' #以两个及以上空格为区分,打印第三列cat data.txt | awk -F: '{print $4}' #以:为分隔符,打印第四列cat data.txt | awk '{print $1=null,$0}' #不打第一列,其他列都输出cat data.txt原创 2022-04-20 17:14:58 · 1072 阅读 · 0 评论 -
conan基本
1、conan是c/c++包管理工具,类似nodejs中的npm。2、c/c++项目从白盒能变为黑盒,依赖间不用再是源码级,问题好定位,管理清晰。3、依赖python大于等于3.54、跨平台linux、mac、windows等5、能管理所有中间二进制文件6、//在远端仓库查看poco库的情况conan search poco --remote=conan-center//查看某个库的信息conan inspect poco/1.9.4//conan运行conan inst原创 2022-01-10 16:16:35 · 1091 阅读 · 0 评论 -
onvif——1——从零到可以编程
在老东家做了五年的onvif,都是在已有架构上改,偏业务,由于各种原因一致也没有从头搭建过。新东家要做onvif,这回我全权负责,光杆司令一枚,配上我这个司令之前做的rtsp,现在已经能够基本运行,odm和海康NVR都OK。这篇文章就从头写到这。时间也过了很久,我尽量回忆写细。gsoaponvif协议一般都是用工具辅助开发,所有的都自己做当然可以,因为onvif就是 http + xml ...原创 2020-04-25 17:13:27 · 803 阅读 · 0 评论 -
配置vim为程序编辑器
程序员圈子里有这样一个传说,用vim编程的都是大神。工作近七年未见一人是这种操作,本周开始我决定改用vim进行编程,最终实现双手不离键盘不动鼠标的终极目标!本文讲解vim配置方法,后面还会讲到常用快捷键,使用中的一些心得。已经使用了三天左右进行开发调试,没比clion差太多,右手去触碰鼠标的次数明显降低,就是比较费脑子,因为你的移动,复制粘贴,替换等所有操作都需要思考如何去做。vim的配置...原创 2020-04-25 15:03:47 · 335 阅读 · 0 评论 -
工业相机传输照片丢数据
最近使用工业相机抓拍,用arm64的sdk抓图总是存在丢帧问题,最终发现是cpu性能导致。下面将一些点分享出来。问题照片大小基本是7M到10M之间。共出现两种异常照片。第一种经常出现在刚开始抓拍的时候,第二种在后面随机。1、照片中有横向绿色条纹。2、照片中某些地方存在水波纹。调试在多种平台进行过调试。1、rk3399(2个A72+4个A53);2、tx2(2个d...原创 2020-03-19 15:06:12 · 733 阅读 · 0 评论 -
将expect脚本移植到嵌入式linux上
嵌入式设备需要telnet访问服务器并在服务器上执行工具,用expect脚本实现,但嵌入式系统已经将expect裁剪掉,今天将expect移植过来,不是十分清晰,为了防止以后忘记,将整个过程记录下来。网上相关并不多,这篇是我认为写的最好的。tcl和expect版本有很多,为了简洁,我使用的也是这篇文章链接中的版本,分别是tcl8.6.10-src.tar.gz和expect5.45.3.tar...原创 2020-01-08 09:05:33 · 689 阅读 · 0 评论 -
6——嵌入式WebServer的移植——appweb实现文件上载(upload)
开发一个从chrome上传文件到嵌入式设备上的功能,再次调试appweb。费了九牛二虎之力最终实现了。appweb对http支持非常完整加上我对http理解算不上精通导致了巨大的困难,现在将一些心得分享出来。sample中的实现在samples文件夹中esp-upload是上载的例子。其中README.md中介绍了运行方法和地址,测试好用。整个功能是appweb加载解析appweb.con...原创 2019-12-10 20:55:35 · 1135 阅读 · 0 评论 -
libpcap/tcpdump—6—交叉编译
我使用海思编译链,gcc分别是:arm-hisiv300-linux-gcc和arm-himix200-linux-gcc。和其他工具类似,先configure,再make。1、libpcap:1、configure:./configure --disable-usb --disable-bluetooth --host=arm-himix200-linux如上所示为配置方法,编...原创 2019-11-26 14:15:11 · 493 阅读 · 0 评论 -
libpcap/tcpdump—5—捕获方式(AF_PACKET原始套接字)
pcap_loop调用pcap_read_linux_mmap_v3循环捕获数据,此时程序已经进入正常嗅探过程,而我们应该重点关注的点应该是在这之前的启动过程。整体了解之后发现一切都是围绕着socket展开,这个socket和以往纯应用层tcp/udp的socket不一样,它将Ethernet、ip、tcp层的数据都暴露出来,被称作原始套接字。libpcap/tcpdump就是用原始套接字...原创 2019-11-21 20:48:17 · 1246 阅读 · 0 评论 -
libpcap/tcpdump—4—文件结构
抓包的输出虽然可以在终端上显示,但使用-w选项写一个文件用wireshark打开分析才是最常用的方法。这篇文章讲解写出的文件结构,暂不介绍函数调用关系。The pcap file has the following format: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | file h...原创 2019-11-08 22:18:06 · 228 阅读 · 0 评论 -
libpcap/tcpdump—3—抓包结论(3 packets captured,3 packets received by filter,0 packets dropped by kernel)
每次在退出tcpdump的时候,终端上都会显示上图这样的3行信息。本篇文章就是想讲解这3个数值的相关信息。我会尽量写的详细,但能力有限,核心地方无法点到本质。这条信息是tcpdump.c中info(register int verbose)接口打印的信息。部分代码如下所示:其中packets_captured表示捕获到的包的数量,如果指定了-w选项也就是写入到文件中的包数,下一篇...原创 2019-11-05 21:56:43 · 4429 阅读 · 0 评论 -
动态库链接动态库运行问题
问题liba.so包含函数符号abc,libb.so里面又调用了函数abc。程序运行的时候如果普通dlopen会报错,libb.so无法找到符号abc。解决dlopen的时候参数加入RTLD_GLOBAL即可。下面是man中的解释,就是针对这种问题。一个动态库需要的符号在另一个动态库中定义,非常不提倡!但有时候动态库不是你做的,你没有办法去修改,也只能这么去做保证程序的运行。RT...原创 2019-10-24 20:43:45 · 253 阅读 · 0 评论 -
libcurl中cookie的使用
异步multi没有使用,easy是最常用的。cookie我试了下面4个宏,基本全了。cookie的细节很多,但不是我的重点,就这么笼统的写一下。CURLOPT_COOKIE参考https://curl.haxx.se/libcurl/c/CURLOPT_COOKIE.html说明1、第一种自定义cookie,只需调用一次,多次调用以最后一次为准2、格式必须是NAME=CONT...原创 2019-10-11 16:44:17 · 1655 阅读 · 0 评论 -
libcurl交叉编译方法
linux上开发httpClient使用最广发的就是curl了,关于curl和libcurl区别等科普知识不是我要写的内容。我使用版本是curl-7.66.0。交叉编译和发行版大linux编译我都进行了尝试,其实最开始只是交叉编译,但因为要用cookie,所以才进行的ubuntu编译,比交叉编译遇到的问题更棘手。这篇文章会把遇到的一些问题说一下,细节不赘述。点击这里是下载地址,写此文章时最新的版本...原创 2019-10-11 16:17:39 · 786 阅读 · 0 评论 -
libpcap/tcpdump—2—网络信息(listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes)
这条信息在运行tcpdump的时候都会见到,那它到底代表什么,又是怎么产生的。这篇文章就说一下这个事。这条信息共有4个内容,分别是:ens33,EN10MB,Ethernet 和 262144.这是最全的情况,查看tcpdump代码你会发现还有3个内容的情况,那个比这个要简单。忘了说了,我使用的tcpdump是4.9.2,libpcap是1.9.0.下面就把这4个内容分别介绍一下。ens3...原创 2019-09-17 17:40:38 · 5678 阅读 · 0 评论 -
解决一个信号6问题(sig6,signal6,SIGABRT,double free or corruption (!prev))
我遇到的信号6 99%都是由于数据越界导致,在memcpy的时候没有错误,在free的时候系统报SIGABRT。今天也不例外。代码是我写的,考虑不周,以后拷贝更多加小心。上图中的data大小为1024,如果memcpy 1025各字节,拷贝正常,但是在你free它的时候就会报上面截图中的错误。这就是原因。遇到这种问题不要怕,新手不要给自己设置障碍,信号是系统提供给你的帮助,而不是困难。...原创 2019-09-04 17:56:42 · 32330 阅读 · 2 评论 -
使用nc在linux设备间传送文件
嵌入式linux设备不一定都支持tftp,我遇到的还好支持nc工具,可以实现文件传递的功能。nc netcat步骤1、接收方运行:busybox nc -l 接收方IP:接收方端口 < 文件名2、发送方运行:busybox nc 接收方IP 接收方端口 < 文件名简单的2个步骤就能解决文件传递问题,记录下来是因为总忘,总需要baidu...原创 2019-08-17 15:17:52 · 778 阅读 · 0 评论 -
libpcap/tcpdump—1—编译安装
tcpdump的编译依赖libpcap编译出来的libpcap.a 所以在编译tcpdump之前需要先编译libpcap,我使用的是libpcap-1.9.0和tcpdump-4.9.2。1、将两个文件夹放在同一个文件夹下,也就是目录下。这个在tcpdump的README.md中有说明,包括先编译libpcap也有说明。2、进入libpcap文件夹执行./configure进行配置,开始阶...原创 2019-08-09 17:33:48 · 1072 阅读 · 0 评论 -
openssl交叉编译方法
查看手头openssl文件夹,发现有以前交叉编译openssl时候的一个说明,已经不记得了,防止丢失写此文章。总共就3步。1、先执行: ./config no-asm 如果需要动态库,执行: ./config no-asm shared。--prefix=/usr/local/openssl选项指定install的地址,install后可以在里面找到库和头文件等,有需要的话,可以加入-fPIC...原创 2019-08-09 15:05:07 · 1058 阅读 · 0 评论 -
关于正常程序启动的时候Bus error的问题
今天下午在运行一个executable的时候只要一执行就报错Bus error,用gdb执行的话也是报错SIGBUS,gdb报错如下图所示。GDB执行的结果因为是在调试appweb的时候出的问题,我一度以为appweb有什么隐藏的逻辑会导致硬件错误(boa以前遇到过,非常可怕)。和同事进行了设备和程序的交互后认为还是有哪里忽略了。因为我的这个程序加我的这个设备,在同事电脑上运行的时候是正...原创 2019-02-18 17:23:39 · 1294 阅读 · 1 评论 -
4——Linux二进制分析——学习——ptrace调试器
书中第3.4节贴了一个ptrace使用方法的例子,没有过多的解释,并且test.c代码也欠缺。我用了很长的一段时间进行了反复调试,虽然还不是非常的熟悉,但应该可以写这篇文章了。gdb是我们所有嵌入式软件工程师都会用到的一个工具,我也不例外。曾经也想过看一看gdb内部是怎么实现的,大家应该都有过这种想法吧。除了gdb还有strace,它们是如何能跟踪自己写的进程呢?怎么就能看系统调用、设置断点、...原创 2019-02-20 09:34:37 · 844 阅读 · 11 评论 -
5——Linux二进制分析——学习——关于elf文件类型/-no-pie选项
《4——Linux二进制分析——学习——ptrace调试器》的补充。关于编译test的问题。我直接通过gcc test.c -o test编译,在执行的时候会报错./testshare is not an ELF executable. The type: 3.我用readelf -h test去查看头文件的时候发现test的文件格式是 DYN (Shared object file),而我想...原创 2019-02-20 09:47:30 · 6132 阅读 · 0 评论 -
如何简单的杀死频繁启动的进程
这几天在调试ptrace的时候,书中指令中用到了pidof工具,突然间想到了标题中的那种情况。我们在工作中经常会遇到这么一种情况:后台启动一个进程,现在想杀死它,除了killall name外还有一种用kill的写法:kill -9 `pidof name` 很好用,需要注意的是那个符号,是和~同一个案件的那个·,而不是‘。...原创 2019-02-27 09:21:21 · 356 阅读 · 0 评论 -
payload.c详细说明——linux c编程内嵌汇编和_start启动
下面是代码和注释,我详细的讲解一下。在这之前我是不懂的,虽然在看kernel代码的时候经常看到内嵌汇编代码,但也没有认真去学习。借着这次机会查了一下,谈不上懂了,但这3个接口应该是每一行都明白了。希望以后的开发过程中我也能用一下来提高性能,高逼格操作。感谢这篇文章的作者C语言内联汇编。这个是官网的一些知识,有兴趣可以看一下GCC-Inline-Assembly//To compile: g...原创 2019-03-09 16:50:39 · 576 阅读 · 0 评论 -
core文件配置
-1、编译带-g。0、打开一个终端。1、设置core大小为不受限。ulimit -c unlimited2、core文件名字带线程号。echo "1" > /proc/sys/kernel/core_uses_pid3、core文件名字格式的设置。echo "/dbg/core-%e-%p-%t" > /proc/sys/kernel/core_pattern4、...原创 2019-03-14 17:02:02 · 1037 阅读 · 0 评论 -
2——man elf的翻译——Program header (Phdr)
Program header (Phdr) program header 是一个 array of structures,每一个描述了 a segment 或者是系统需要的程序执行的信息。 一个 object 文件的 segment 包含一个或几个 sections。program header 只有在 executable 和 shared object file 中才有...翻译 2019-03-25 10:18:56 · 1020 阅读 · 0 评论 -
8——Linux二进制分析——学习——读完
用了今天一上午把剩下的两章半读完了,内存取证,作者开发的ecfs,还有kernel取证。现在感觉这本书读完前五章就可以了,后面的大概看看就行。介绍ptrace那一章才是最有用的部分,还算是扩展了一下我的视野。其他的我可以概况为两部分,一部分是作者的自我吹嘘,介绍自己开发的几个工具占用的篇幅太大。另一部分是就是一些简单的科普知识,指一个大概思路。书中提到了很多的工具源码路径,如果能研究一到两个肯...原创 2019-03-30 11:55:26 · 373 阅读 · 0 评论 -
3——man elf的翻译——Section header (Shdr)
Section header(Shdr) 通过section header table能够定位文件所有的section。section headertable 的格式是Elf32_Shdr或者Elf64_Shdr。 ELF header 的e_shooff字段是section header table从文件开始位置的偏移量。e_shnum是section header tables...翻译 2019-03-29 09:24:10 · 311 阅读 · 0 评论 -
关于sizeof()使用的另外一种写法—— sizeof * 变量
今天在阅读代码的时候再次遇到了sizeof()的另外一种使用方法,然后自己进行了尝试,现在也仅仅是知道含义,深层次的含义此刻并不得而知,如果读者您知道,希望您能评论一下,谢谢。在readelf源码中有get_64bit_section_headers()这样一个函数,里面在进行长度比较的时候有下面这样的一段代码:Elf64_External_Shdr * shdrs;Elf_Inte...原创 2019-04-16 20:20:11 · 465 阅读 · 0 评论 -
readelf——1——环境搭建(编译)
上一个阶段翻译完了man elf,下面准备学习一下readelf,addr2lime,objdump等elf相关工具。之所以从readelf入手,是因为我感觉它最合适吧,原因也不清楚,因为哪个工具我都谈不上精通,选择一个马上行动才是最重要的。学习readelf,当然要知道它是从哪里来的。不是这个计划我真的不知道它们这些神秘的神器是来自哪里,linux内核是没有它们源码的。它们都是来自binut...原创 2019-04-16 20:40:46 · 652 阅读 · 0 评论 -
readelf——2—— -h --file-header Display the ELF file header
-h显示文件头应该是最简单的一个参数,我想没有之一了,只有下面这一点点的输出:ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's co...原创 2019-04-16 20:54:51 · 223 阅读 · 0 评论 -
大规模回调函数(函数指针)的一种实现方法
/** * 这是今天看到的一种写法,以前没有注意,今天其他 * 需求又看了一下,有点感触,精简一下分享出来。 * * register和call里面的while循环是此方法的精髓。 * 同一个id可以有很多个不同的注册函数, * 这些函数通过register中的while循环添加到链表中, * 又通过call中的while循环一个一个的调用。 * * 在复杂重复逻辑的地方用...原创 2019-05-15 16:33:49 · 165 阅读 · 0 评论 -
第一次写shell脚本遇到的一些问题
最近的一个任务需要用shell脚本实现,这也是我第一次正式的写shell脚本。由于之前没怎么写过shell脚本,所以流程的每一步我都需要上网查,然后实验,过程还是挺艰难的。网上能查到的比较多的相关知识我就不赘述了,写一些我认为不是特别多的吧。脚本要实现一个什么功能呢?在服务器上实现嵌入式设备程序的自动下载、编译、升级、验证。下载:git下载,多地址,多分支,多版本,需要校验。编译:简单...原创 2019-06-24 20:46:46 · 218 阅读 · 0 评论 -
动态库链接静态库遇问题
问题liba.so的编译依赖libb.a,链接后正常编译通过。运行加载liba.so的时候报找不到函数int c(int d ).原因原因现在讲不清楚,只知道和链接,地址,程序执行过程有关。解决在编译libb.a的时候加上 -fPIC 选项(编译为位置独立(地址无关)的代码)这篇博客写的挺好的其他ldd -r liba.so | grep c 和nm liba.so ...原创 2019-07-24 20:39:04 · 1161 阅读 · 0 评论 -
6——Linux二进制分析——学习——ptrace调试器V2
这是3.5章节的内容,这个例子对上一章节的ptrace工具进行了完善,主要是添加了attach功能,也就是获取正在运行的程序的信息,gdb就有这个功能,用的应该也是这个方法。本来作者写此书的时候就已经很简略了,省去了很多详细的介绍,测试代码也没有给出。手头的中文版中的代码更是经常有错误,如果照搬书中的例子注定无法得到预期的结果。我进行了修改和调试,能够得到书中作者提到的正确的结果。这个例子只是...原创 2019-02-23 17:14:28 · 289 阅读 · 6 评论