x86_64 寄存器传参方式

·1min·李岩
x86_64 寄存器传参方式

bpftrace 无侵入遍历golang链表

bpftrace 基于 bcc 进行开发的工具,语法简洁、功能强大。用其分析Linux 环境下的程序会很方便。本文构造了一个入参为链表头节点的函数使用场景,通过使用bpftrace无侵入遍历链表成员的方式,介绍bpftrace attach uprobe 的使用。更多使用说明见:bpftrace官网使用文档

·2min·李岩
bpftrace 无侵入遍历golang链表

让emacs在保存文件时自动格式化代码

liam同学在让 Vim 在保存文件时自动格式化代码一文中展示了保存时自动化格式代码的vim配置。作为emacs用户,自然有自己的解决方案。以下呈现。

·2min·李岩
让emacs在保存文件时自动格式化代码

golang 常见类型字节数

ebpf 分析golang程序时,离不开对参数大小的判断。这里列出来一些基本类型的大小,并通过汇编对应验证函数的方式来肯定判断结果。

信息

这里列出基本类型及其作为参数传递时,占用的空间大小如下表。

类型长度说明
指针8B64位机为 8Byte, 32位机位4Byte
context16Binterface 类型。其中,前8B是类型信息,后8B是对象的指针信息
interface16B2 个指针,详见draveness-go-interface,或者 runtime/runtime2.go iface/eface 定义
int648B-
int8B64位机为 8Byte, 32位机位4Byte
string16B8B 地址 + 8B string长度
slice24B8B地址 + 8B slice 成员数量 + 8B slice capability
func8Bfunc 作为函数参数时,传递的是 func 的地址

需要注意的是,作为函数参数传递时,golang会对参数按照 8B 进行对齐。

·2min·李岩
golang 常见类型字节数

golang proto3 使用

一直都比较赞赏protocol buffer。由于其表现性强、压缩比高,可以把很多结构都写到proto文件中,同时添加很多的注释。当需要进行进行数据存储时,使用proto序列化结果替代json,可以省去很多的冗余字段。本篇找了一些golangprotocol buffer的使用示例,以及protocol对象与json对象互相转换的示例。

·2min·李岩
golang proto3 使用

challenges of bpf tracing go

·1min·李岩
challenges of bpf tracing go