黑魔法--用 ebpf 构建用户空间数据的桥梁
在之前的示例中,仅涉及到ebpf对用户空间数据的读取。工程性较强的如:ebpf采集mysql请求信息及ebpf对应用安全的思考也仅是通过urpobe采集用户空间的数据。本文介绍点ebpf的“黑魔法”:将用户空间数据的读取、用户空间数据的写入结合起来,成为用户空间数据交互的桥梁。
·3min·李岩
黑魔法--用 ebpf 构建用户空间数据的桥梁ebpf采集mysql请求信息及ebpf对应用安全的思考
本文笔者继续介绍
ebpf的应用:使用bpftrace采集mysql连接信息,包括数据库地址、db_name、user_name。在展示采集操作的同时,附上对ebpf对云时代应用安全的一些思考。
目标
使用bpftrace对一个运行中进程的mysql请求进行采集,目标采集内容包括数据库地址、db_name、user_name。
·4min·李岩
ebpf采集mysql请求信息及ebpf对应用安全的思考x86_64 寄存器传参方式
·1min·李岩
x86_64 寄存器传参方式bpftrace 无侵入遍历golang链表
bpftrace基于bcc进行开发的工具,语法简洁、功能强大。用其分析Linux环境下的程序会很方便。本文构造了一个入参为链表头节点的函数使用场景,通过使用bpftrace无侵入遍历链表成员的方式,介绍bpftraceattach uprobe的使用。更多使用说明见:bpftrace官网使用文档
·2min·李岩
bpftrace 无侵入遍历golang链表让emacs在保存文件时自动格式化代码
liam同学在让 Vim 在保存文件时自动格式化代码一文中展示了保存时自动化格式代码的
vim配置。作为emacs用户,自然有自己的解决方案。以下呈现。
·2min·李岩
让emacs在保存文件时自动格式化代码golang 常见类型字节数
ebpf分析golang程序时,离不开对参数大小的判断。这里列出来一些基本类型的大小,并通过汇编对应验证函数的方式来肯定判断结果。
信息
这里列出基本类型及其作为参数传递时,占用的空间大小如下表。
| 类型 | 长度 | 说明 |
|---|---|---|
| 指针 | 8B | 64位机为 8Byte, 32位机位4Byte |
| context | 16B | interface 类型。其中,前8B是类型信息,后8B是对象的指针信息 |
| interface | 16B | 2 个指针,详见draveness-go-interface,或者 runtime/runtime2.go iface/eface 定义 |
| int64 | 8B | - |
| int | 8B | 64位机为 8Byte, 32位机位4Byte |
| string | 16B | 8B 地址 + 8B string长度 |
| slice | 24B | 8B地址 + 8B slice 成员数量 + 8B slice capability |
| func | 8B | func 作为函数参数时,传递的是 func 的地址 |
需要注意的是,作为函数参数传递时,golang会对参数按照 8B 进行对齐。
·2min·李岩
golang 常见类型字节数