Modifying binary during execution
2022-9-24
当进程运行的时候,ld.so 将可执行文件和共享库mmap到进程的虚拟地址空间。只有当一个page被访问的时候,才会加载到内存。所以不是一下就立即加载的。mmap之后,是不能修改文件的,尝试修改将返回Text file busy。[yuanjianpeng@fedora test]$ ./a.out
stty设置终端宽度,解决ps w显示命令不全的问题
2022-11-16
在路由器串口,或者xterm远程web终端执行ps w命令的时候,命令显示不全,好像最多只显示80列宽。这个原因是tty的默认宽度是80。ps会读取这个宽度,超过的截断了,如下: 149 root 0:00 netd 151 root 0:00 [kworker/0:3-ip
use perf analysis kernel performance
2023-5-12
最近在了解linux网络性能的问题,看到了参考[1]这篇文章。作者碰到了一个性能问题,然后内核社区的大佬指导使用perf找到了性能的瓶颈。很早以前,我记得也用perf在博通的路由器平台找出过一个性能问题,故今天记录一下。perf的编译perf的源码在内核tools/perf目录下面。编译方法:$ A
水线太高,导致MemAvailable比MemFree少的问题
2023-8-7
最近一个项目需要统计设备的剩余内存,之前都是用/proc/meminfo里面的MemFree,发现MemFree实际上统计得少了,因为那些可清理的page cache,实际上是可用的内存。于是改成了MemAvailable,但是在另外一个项目发现,MemAvailable竟然比MemFree还少一大
use loop device emulate block device
2023-8-16
有时候为了了解磁盘分区知识、分析异常启动等问题,需要模拟一个块设备。loop device就应运而生。loop device使用文件作为后备,创建虚拟块设备。loop device的工具是losetup。losetupset up and control loop devices查看
dos partiton table format
2023-8-16
Master Boot Record (MBR)这是古老且长久的分区表格式。MBR位于磁盘的第0个LBA(logical block addressing),现在linux系统已经没有CHS (Cylinder-Head-Sector)的概念了。MBR还包括boot code,分区表。分区表只是MB
dnsmasq僵尸进程分析
2023-9-5
Xrouter平台运行过程中,出现很多dnsmasq的僵尸进程:# ps w 191 root 0:00 udhcpc -i eth0 -p /run/net/udhcpc.eth0.pid -s /lib/network 192 nobody 0:00 dnsmasq -k -
linux read process memory
2023-9-19
Linux如何读取进程某一块内存的数据呢?例如,进程发生段错误了:do_page_fault(): sending SIGSEGV to managePlugin for invalid read access from 76e3ddbcepc = 7738d83c in libc.so[77319
linux user program check invalid memory
2023-9-20
内核有一个宏access_ok(addr, size),可以检查用户内存是否合法。在用户态怎么检查呢?用户态访问非法内存,将导致segv信号,导致段错误。使用setjmp和longjmp,可以实现从segv信号处理函数跳转到出错前的指令。从而实现非法内存检查。代码如下:#include
LD_PRELOAD for hooking libc functions
2023-9-20
有时候,我们需要hook一个c库的函数,加一些自己的逻辑,然后再调用c库的函数。然后方法就是编译一个共享库,这个共享库实现同名c库函数,使用LD_PRELOAD的方式提前加载这个共享库。在同名函数中,使用 dlsym(RTLD_NEXT, ""); 的方式,获得c库函数的
Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.