- 博客(25)
- 资源 (3)
- 收藏
- 关注
原创 摆脱跳板,使用bpftrace任意时刻暂停程序等待gdb附加
以前调试的时候,经常会用到一系列进程启动,需要附加到某一个进程,这个进程可能被其他程序唤起的,又很快就结束了,也不能直接执行这个程序复现情况,必须要在当时的现场中运行。上面的步骤中,/dev/pts/13是另一个终端,要把gdb的pid发送到另一个终端中,方便另一个终端中使用gdb附加到这个出错的gdb中。然后sleep(10)为了留出时间附加,在接下来execve将会将这个跳板替换为真正的gdb程序。
2025-04-03 10:23:23
259
原创 抓虫:捡个漏,loongarch架构gdb dump Assertion `supply_size == collect_size‘ failed.
loongarch架构的系统中,gcore命令用于转储进程,此时gcore会挂掉报错,一个断言错误。
2025-03-27 13:17:55
952
原创 BCC-应用程序组件分析
追踪glibc中的函数用时以为例,域名的访问需要先解析域名为ip,再对ip进行访问。解析域名大多数应用层程序会通过调用glibc的相关函数解析。
2025-03-26 14:49:41
702
原创 BCC-CPU模块梳理
统计各类型硬中断消耗时间部分类型的中断处理分上半部和下半部,如网络,网络硬中断只负责唤醒软中断,硬中断只会耗时非常短。部分类型的中断处理和cpu数量成倍关系。
2025-03-25 15:37:09
614
原创 BCC-调度组件分析
第一个百分比 running/总,代表cpu的负载,类似于top命令看到的负载/cpu个数或windows任务管理器显示的cpu负载百分比。上面的示例就是8核cpu上8开启了8个任务但8个任务都设置了绑定到一个cpu上。用以计算cpu无人认领的几率,代表有任务都被挤在个别cpu了有的核心空闲,有的核心任务太多。统计任务加入调度队列或失去CPU时到获取CPU任务上线的时间间隔,以直方图呈现。统计任务加入调度队列或失去CPU时到获取CPU任务上线的时间间隔。统计进程从失去到重新获得CPU的次数,按栈计数。
2025-03-25 15:35:39
1017
原创 BCC-BIO组件分析
对于不同的硬盘物理形态该值的重要性可能不同,对于机械硬盘连续的IO请求对于磁头寻道可能更加友好,但对于SSD,IO是否连续影响可能较小。上方输出表示在一段间隔(默认3s)时,最长的(100%列)写耗时255us完成(on-device开始至结束),大部分写IO可在5us内完成。一次提交IO的长度对于硬盘的物理形态、总线协议也可能有不同的重要性,有些总线一次通信报文长度有限。该位置通常位于块设备驱动层,准备将队列中的扇区对设备操作,此。该位置通常位于块设备驱动层,准备将队列中的扇区对设备操作。
2025-03-25 15:34:13
772
原创 BCC-文件系统组件分析
对于和中的接口并不是会被vfs层直接调用,如果内核处理文件时已经获取到inode或其他表示文件的结构体信息可以直接调用文件系统层的接口操作文件。系统调用open时如果需要创建文件并不通过vfs_createvfs_create用于创建其他特殊类型文件,创建普通文件会在namei层直接调用文件系统的create接口。
2025-03-25 10:21:29
873
原创 从操作系统新的视角看hello world
本篇紧跟上篇《栈-函数调用轨迹图》根据上一篇,知道栈的两个寄存器位置rbprsprip,在内存中便可以获取进程当前执行到了哪个位置,被哪个函数调用到的。虚拟内存:能运行主线linux的芯片都带有专门的设计支持虚拟内存。虚拟内存可以由内核分配给各个进程内存空间,这些分配的空间的内存地址对于各个进程而言不再是物理地址,而是虚拟的地址,每个进程的内存地址各自独立互不影响。每个进程申请到的内存就像是这个进程私有的内存一样使用,互相不影响。虚拟内存概念先了解即可,后面会用到。
2025-03-10 18:12:59
460
原创 栈-函数调用轨迹图
是一个和现在讲的栈有关的选项,以前的一些操作系统为了性能优化和常规程序栈的方式不太一样,以前的已经淘汰不再详述,现在较新的操作系统如。至于这两个寄存器函数跳转如何变化的,,每个函数的开头都是这样的两行,上一个函数的。指令的下一个指令位置(即跳转函数的返回位置)入栈,函数执行结束返回时就会跳转到到。代表新的栈的开始位置,由于栈是自顶向下的所以。区域就是函数内的一个栈帧,函数不发生跳转。函数的位置,这样就完成了一次栈的查找,在。的位置应该就是上一个函数的位置,也就是,指令的下一条位置,符合刚才提到的。
2025-03-09 22:01:53
309
原创 linux网络数据从网卡到应用层需要几次内存拷贝?
环境不考虑报文特殊处理,需要两次数据拷贝。一次发生在网卡收包,网卡的环形队列固定大小,网卡驱动将包放在环形队列,内核需要及时将这些包取走否则队列满网卡将丢弃接下来的包。内核从网卡环形队列中取走放到结构中,在内核的接下来协议栈、socket处理中,始终使用这个结构不需要内存拷贝。第二次内存拷贝发生在内核态到用户态中,用户态进程取回报文中的内容。
2025-02-25 10:58:55
342
原创 eBPF调度器追踪部分项目源码分析
找一些主流的关于调度器追踪的项目看看他们的实现方式bcc虽然是旧式的python+bpf方式变成,但实现方式毫无疑问标杆。其他实现方式用或水平尚可或水平一坨屎的方式重复造轮子一遍,新增的部分大部分是对某些调度追踪点、flag、调度时机理解不到位,新增几乎都是无效代码。
2025-01-03 18:03:07
669
原创 抓虫:申威编译gcc过程中f951程序dump
ld静态链接器查找函数不能正确把这个函数的地址放在.got节中,导致gcc编译出来的程序就是有问题的gcc可以构建出使用而不使用完成加载elf的构造函数ld的错误试了相同版本的其他环境中的程序替换,并没有解决问题,上游可能也没有解决这个问题,看ld的错误实在是太难了,加入是ld动态链接期间的错误还可以gdb watch的方式定位到问题,但是编译出文件有问题这定位可就难了。。。还是原厂来解决吧。。。最后通过强制指定sw架构使用构造二进制跳过了问题完结。。。
2024-12-19 10:48:29
673
原创 抓虫:lorax在mips64el中dump,未能使用指定的配置文件
文件,对内核文件在这个文件中有特殊处理,期望lorax会使用这个文件。在mips64平台中,内核中的文件不一样,版本组新增了这样一个。首先,观察lorax的输出日志,发现这里有一行是使用到了一个。命令追踪制作镜像的过程中使用了哪些脚本,并没有使用到新建的。修改lorax脚本,使用pdb看一下哪里执行到的这。的369行已经报错了。mips中的kernel相关问题,在。这里是lorax脚本里添了一行。的371行,此刻还没有走到这里。而继续运行报错的时候,,找到是在这里输出的。,找到这个地方赋值的。
2024-12-06 13:31:58
320
原创 ext4文件系统
rec_len属性标记一个条目的长度,这个长度可能超过结构体+name实际长度,甚至是远超,可能是文件夹内删除条目时调整,也可能是占位,因为文件夹类型的文件总是和文件系统的块大小整数倍的,如果文件夹内只有一个条目(即使不包含。都是硬盘中实际存储的内容,并不方便在内存中直接使用,有的要做大小端转化,有的要高位地位合并,所以下面的信息就是把常用的信息处理好,方便直接使用。获取设备的逻辑块大小,ext4的最小块大小为1024B,如果设备的块小于ext4的最小块则默认为ext4的最块。
2024-12-05 14:46:38
1119
原创 抓虫:mips架构systemd部分命令移除rpath会dump
systemd的较多命令原先使用rpath控制systemd相关动态库的搜索路径,在后续某次版本中,移除了rpath的方式,改为通过ld.so.conf.d中添加配置文件从上面的程序执行上看,命令必然是执行了的,输出了消息,意味着动态库必然是找到并加载成功了的。通过查看也能看到动态库和原先使用rpath时使用的动态库也是一致的。。。
2024-11-14 10:44:26
597
原创 那么,古尔丹,读写锁的代价是什么呢
在有临界区的情况下,读写锁是有作用的但是,有临界区不属于优秀的程序设计,程序设计应该减少资源互斥,尽可能临界区足够可能是临界区的存在,读锁多线程同时访问起到了作用,读锁的开销≈(互斥锁开销+互斥锁导致的调度开销)在优秀的多线程设计中,临界区足够小的时候,读写锁确实没有优势,不如互斥锁那么简洁不易产生问题。有些锁的封装库或是新的语言有互斥锁,但没有提供读写锁,也行也是这个问题例如下面的伪代码,使用非常小的临界区对共享资源读写,优秀设计read() {{ # 临界区write() {
2024-07-23 11:04:19
398
原创 抓虫:chown失败 Couldn‘t change ownership of savefile
chown报错 Couldn't change ownership of savefile使用ftrace/bpftrace 内核跟踪
2024-06-05 16:41:29
594
原创 centos断开网线,桌面不提示依然显示链接,ip也接着显示,问题排查
属性不正常,正常时此属性为false,不正常时为true,定位到/usr/lib64/libnm.so中。通过和正常的centos情况比对,包后会默认配置忽略carrier。属性标识是否链接,此属性正常。
2024-01-11 15:23:46
556
原创 龙蜥anolis系统迁移组件ance逆向分析、追踪venv,cython生成的so库python执行
gdb的特点在cpython的调试中可以直接解释好python对象,非常直观可以追踪ance的so库函数调用bpf uprobe几乎不影响ance的执行速度可以追踪ance的so库函数调用ance进程的so库映射退出时,栈追踪不到usdt几乎不影响执行速度可以在cpython解释器中定义好,方便转换PyObject等类型极为严谨的最好不调用python的一些会导致引用加减的方法(会限制使用已经存在的打印类的函数)
2024-01-08 09:28:14
832
原创 cPython中的Type、Object结构体定义、内存布局
cPython中,一个package、一个module,甚至一个function,都是一个类,每个类都有自己的Type类表示自己的class类型内存布局PyObject 类指针(类的size存储在这里,私有成员影响size)、引用计数私有成员类.ob_base.ob_size = sizoef(类)
2024-01-08 09:25:53
1156
原创 execve 继承了什么?映射、信号、文件描述符、优先级、ptrace
execve syscall 做了什么重要参考Linux 进程启动 execve 系统调用内核源码解析sp 就绪 执行环境okmaps 映射父进程的所有maps都会消失里被替换为新的进程的mmfiles 文件描述符不变 对除了复制下来外没有额外处理(除了open时候标记为O_CLOEXEC的会被关闭)stdin stdout stderr 和其他 都不会有变化 继承父进程,bash中的管道得以实现信号除了忽略的,其他都被重置为默认信号处理。
2024-01-08 09:13:37
1120
Flask离线一键安装及依赖包.zip
2021-07-13
ksstack_V0.0.4.20210415.zip
2021-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人