首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用 BPF 进行 HTTPS 抓包 —— 以 Golang 和 cURL 为例

实验环境 内核版本 4.1 及以上的 Linux 机器 未删除符号表的目标二进制 操作步骤 阅读源码,找到要插入探针的函数 编写代码,捕获 HTTPS 请求并打印 Golang 示例 目标程序 一个简单的示例...writeRecordLocked(typ recordType, data []byte) 第二个参数就是我们所需要的,知道了这个我们就可以插入探针输出这个参数了 探针代码如下: #include sp; u64 val = 0; bpf_probe_read(&val, sizeof(val), addr + 2); if (val...通常情况下,各 Linux 发行版上实用程序的符号表可能被 strip 掉了,所以需要获取代码重新编译,此过程略去不表。...Curl_send_buffer { char *buffer; size_t size_max; size_t size_used; }; 探针代码如下: #include <uapi/linux

2.7K110
您找到你想要的搜索结果了吗?
是的
没有找到

使用 BPF 进行 HTTPS 抓包 —— 以 Golang 和 cURL 为例

实验环境 内核版本 4.1 及以上的 Linux 机器 未删除符号表的目标二进制 操作步骤 阅读源码,找到要插入探针的函数 编写代码,捕获 HTTPS 请求并打印 Golang 示例 目标程序 一个简单的示例...writeRecordLocked(typ recordType, data []byte) 第二个参数就是我们所需要的,知道了这个我们就可以插入探针输出这个参数了 探针代码如下: #include sp; u64 val = 0; bpf_probe_read(&val, sizeof(val), addr + 2); if (val...通常情况下,各 Linux 发行版上实用程序的符号表可能被 strip 掉了,所以需要获取代码重新编译,此过程略去不表。...Curl_send_buffer { char *buffer; size_t size_max; size_t size_used; }; 探针代码如下: #include <uapi/linux

1.3K20

Linux 内核 内存管理】memblock 分配器 ⑤ ( Linux 内核中定义 memblock 分配器的位置 | ARM64体系架构下 Linux内核初始化 memblock 分配器流程 )

文章目录 一、Linux 内核中定义 memblock 分配器的位置 二、ARM64 体系架构下 Linux 内核初始化 memblock 分配器流程 三、arm64_memblock_init 函数完整源码...一、Linux 内核中定义 memblock 分配器的位置 ---- Linux 内核 定义 memblock 分配器 位置 : Linux 内核源码 linux-4.12\mm\memblock.c...Take care not to clip the kernel which may be * high in memory. */ memblock_remove(max_t(u64, memstart_addr...* Otherwise, this is a no-op */ u64 base = initrd_start & PAGE_MASK; u64 size = PAGE_ALIGN...base, size); } } if (IS_ENABLED(CONFIG_RANDOMIZE_BASE)) { extern u16 memstart_offset_seed; u64

85210

Linux 内核】进程管理 task_struct 结构体 ① ( task_struct 结构体引入 | task_struct 代码示例 )

文章目录 一、task_struct 结构体 二、task_struct 结构体代码示例 一、task_struct 结构体 ---- 在 Linux 操作系统 中 , 进程 作为 调度的实体 , 需要将其抽象为..." 进程控制块 " , 英文全称 " Progress Control Block " , 简称 PCB ; 在 Linux 内核 中 , " 进程控制块 " 是通过 task_struct 结构体...进行描述的 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct 结构体的 ; task_struct 结构体在 linux-5.6.18\include\linux..._*, siglock protected: */ unsigned long jobctl; /* Used for emulating ABI behavior of previous Linux...utime; u64 stime; #ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME u64 utimescaled; u64 stimescaled

3.1K30

Linux时间子系统之时间的表示示例详解

它的声明如下(代码位于kernel/time/timer.c中): __visible u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES...jiffies的引用(代码位于include/linux/jiffies.h中)申明为: extern u64 __cacheline_aligned_in_smp jiffies_64; extern...(void) { return (u64)jiffies; } 而对于32位系统来说,由于其对64位读写不是原子的,所以还需要持有jiffies_lock读顺序锁: u64 get_jiffies_64...3)ktime_t 在Linux的时间子系统内,一般使用ktime_t来表示时间,其定义如下(代码位于include/linux/ktime.h): typedef s64 ktime_t; 就是一个非常简单的...总结 到此这篇关于Linux时间子系统之时间的表示的文章就介绍到这了,更多相关Linux时间的表示内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

3.6K21

CFS 调度器数据结构篇

调度类 CFS调度器是在Linux2.6.23引入的,在当时就提出了调度类概念,调度类就是将调度策略模块化,有种面向对象的感觉。...put_prev_task: 获得当前进程之前的那个进程 set_curr_task: 用来设置当前进程的调度状态等 task_tick: 在每个时钟tick的时候会调度各个调度类中的tick函数 Linux...exec_start; u64 sum_exec_runtime; u64 vruntime; u64 prev_sum_exec_runtime; u64 nr_migrations...; struct sched_statistics statistics; 从Linux2.6.23开始引入了调度实体的概念,调度实体封装了进程的一些重要的信息。...在之前的O(1)算法中调度的单位都是task_struct,而在Linux2.6.23引入调度模块化后,调度的单位成为调度实体sched_entity load就是此进程的权重 run_node:CFS

1.1K10

eBPF 入门实践教程十六:编写 eBPF 程序 Memleak 监控内存泄漏

eBPF(扩展的伯克利数据包过滤器)是一项强大的网络和性能分析工具,被广泛应用在 Linux 内核上。eBPF 使得开发者能够动态地加载、更新和运行用户定义的代码,而无需重启内核或更改内核源代码。...Tracepoint 是一种在 Linux 内核中提供的动态追踪技术,它可以在内核运行时动态地追踪特定的事件,而无需重新编译内核或加载内核模块。...在Linux内核中,kmem_cache_alloc函数和kfree函数分别用于内核态的内存分配和释放。...在Linux内核中,tracepoint 是一种可以在内核中插入的静态钩子,可以用来收集运行时的内核信息,它在调试和性能分析中非常有用。...在Linux中,uprobes是一种内核机制,可以在用户空间程序中的任意位置设置断点,这使得我们可以非常精确地观察和控制用户空间程序的行为。

56720
领券