<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SenberHu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SenberHu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SenberHu]]></copyright><item><title><![CDATA[Vscode 解决Golang无法跳转到定义]]></title><link>https://blog.youkuaiyun.com/SenberHu/article/details/124824187</link><guid>https://blog.youkuaiyun.com/SenberHu/article/details/124824187</guid><author>SenberHu</author><pubDate>Tue, 17 May 2022 16:20:52 +0800</pubDate><description><![CDATA[首先，需要安装好 go 插件，插件市场搜索go，选一个即可安装。
然后，需要安装 go 的工具包。在 vscode 中，输入快捷键：command(ctrl) + shift + p，在弹出的窗口中，输入：go:install/Update Tools，回车后，选择所有插件(勾一下全选)，点击确认，进行安装（设置GOPROXY）。
接下来，在项目的 settings.json 文件中添加配置：
   "go.goroot": "D:\\Go",
    "go.gopath": "D:\\gopath",
]]></description><category></category></item><item><title><![CDATA[Perf / Ring Buffer对比]]></title><link>https://blog.youkuaiyun.com/SenberHu/article/details/124824158</link><guid>https://blog.youkuaiyun.com/SenberHu/article/details/124824158</guid><author>SenberHu</author><pubDate>Tue, 17 May 2022 16:20:27 +0800</pubDate><description><![CDATA[Perf Buffer常规用法：
struct addrinfo  //需要上传给应用层的数据结构
{
  int ai_flags;         /* Input flags.  */
  int ai_family;        /* Protocol family for socket.  */
  int ai_socktype;      /* Socket type.  */
  int ai_protocol;      /* Protocol for socket.  */
  u32]]></description><category></category></item><item><title><![CDATA[Cilium/eBPF令人无语的加载机制记录]]></title><link>https://blog.youkuaiyun.com/SenberHu/article/details/124824141</link><guid>https://blog.youkuaiyun.com/SenberHu/article/details/124824141</guid><author>SenberHu</author><pubDate>Tue, 17 May 2022 16:19:08 +0800</pubDate><description><![CDATA[前段时间编译bpf c文件，都是用的bpf2go这个go包，这个包虽然很方便，但是指定参数比较困难，
学习到tracee falco这种大型项目都是通过makefile直接编译bpf代码，因此打算自己写Makefile
clang -D__KERNEL__ -D__ASM_SYSREG_H \
		-D__BPF_TRACING__ \
		-Wunused \
		-Wall \
		-Wno-frame-address \
		-Wno-unused-value \
		-Wno-unknown-war]]></description><category></category></item><item><title><![CDATA[eBPF编写避坑指南]]></title><link>https://blog.youkuaiyun.com/SenberHu/article/details/124824114</link><guid>https://blog.youkuaiyun.com/SenberHu/article/details/124824114</guid><author>SenberHu</author><pubDate>Tue, 17 May 2022 16:18:45 +0800</pubDate><description><![CDATA[0x1:基本概念

当使用tracepoint的时候，函数参数如何确认？

cat /sys/kernel/debug/tracing/events/syscalls/xxx/format.   xxx为要跟踪的函数，在这里有函数参数定义。



0x2:注意事项


写结构体的时候一定要注意内存对齐，防止被编译器优化填充。


使用 LLVM 内置的函数做内存操作


#ifndef memset
# define memset(dest, chr, n)   __builtin_memset((dest]]></description><category></category></item><item><title><![CDATA[eBPF代码流程分析]]></title><link>https://blog.youkuaiyun.com/SenberHu/article/details/124824063</link><guid>https://blog.youkuaiyun.com/SenberHu/article/details/124824063</guid><author>SenberHu</author><pubDate>Tue, 17 May 2022 16:17:48 +0800</pubDate><description><![CDATA[0x1:应用层流程
基于Linux kernel source v5.13
1.加载bpf.o文件并处理elf section信息
1.int bpf_object__open(char *path) //参数是bpf.o文件路径
   -- __bpf_object__open(const char *path, const void *obj_buf, size_t obj_buf_sz, const struct bpf_object_open_opts *opts)//读取obj文件，解析elf中s]]></description><category></category></item><item><title><![CDATA[eBPF-AntiRootkit]]></title><link>https://blog.youkuaiyun.com/SenberHu/article/details/124824044</link><guid>https://blog.youkuaiyun.com/SenberHu/article/details/124824044</guid><author>SenberHu</author><pubDate>Tue, 17 May 2022 16:15:44 +0800</pubDate><description><![CDATA[背景：
针对最近几年频繁出现的通过eBPF进行容器逃逸、rootkit等攻击，需要考虑如何收敛服务器ebpf相关权限，防止被黑客利用。
静态方案：
宿主机层面：

非root用户不赋予CAP_BPF及CAP_SYS_ADMIN
注：3.15 - 5.7 内核不赋予CAP_SYS_ADMIN即可   5.8及以后内核需要同时不存在CAP_BPF及CAP_SYS_ADMIN权限
非root用户禁止调用ebpf功能 /proc/sys/kernel/unprivileged_bpf_disabled 设置为1

]]></description><category></category></item><item><title><![CDATA[Centos 4.18 eBPF编译环境搭建]]></title><link>https://blog.youkuaiyun.com/SenberHu/article/details/124824020</link><guid>https://blog.youkuaiyun.com/SenberHu/article/details/124824020</guid><author>SenberHu</author><pubDate>Tue, 17 May 2022 16:14:55 +0800</pubDate><description><![CDATA[背景：
本文主要解决centos7 4.18内核系统eBPF编译环境搭建
流程：
1.内核升级
关于如何在centos7安装4.18内核，这个网上有大把教程，不再赘述
2.编译套件升级
centos7 默认clang llvm版本较低，不识别-target=bpf命令，因此需要对clang进行升级
GCC升级
编译llvm，需要gcc至少为 5.1版本，centos默认安装的是 gcc 4.8.5。
yum install centos-release-scl 
yum install devtoolset]]></description><category></category></item><item><title><![CDATA[eBPF开发指南]]></title><link>https://blog.youkuaiyun.com/SenberHu/article/details/124824004</link><guid>https://blog.youkuaiyun.com/SenberHu/article/details/124824004</guid><author>SenberHu</author><pubDate>Tue, 17 May 2022 16:14:27 +0800</pubDate><description><![CDATA[0x1:技术背景
bpf：
BPF 的全称是 Berkeley Packet Filter，是一个用于过滤(filter)网络报文(packet)的架构。（例如tcpdump)，目前称为Cbpf（Classical bpf）
Ebpf：
eBPF全称 extended BPF，Linux Kernel 3.15 中引入的全新设计, 是对既有BPF架构进行了全面扩展，一方面，支持了更多领域的应用，比如：内核追踪(Kernel Tracing)、应用性能调优/监控、流控(Traffic Control)等；另一]]></description><category></category></item><item><title><![CDATA[eBPF简介]]></title><link>https://blog.youkuaiyun.com/SenberHu/article/details/124823928</link><guid>https://blog.youkuaiyun.com/SenberHu/article/details/124823928</guid><author>SenberHu</author><pubDate>Tue, 17 May 2022 16:11:44 +0800</pubDate><description><![CDATA[基础概念
eBPF是kernel 3.15中引入的全新设计，将原先的BPF发展成一个指令集更复杂、应用范围更广的“内核虚拟机”。
eBPF支持在用户态将C语言编写的一小段“内核代码”注入到内核中运行，注入时要先用llvm编译得到使用BPF指令集的elf文件，然后从elf文件中解析出可以注入内核的部分，最后用bpf_load_program方法完成注入。 用户态程序和注入到内核中的程序通过共用一个位于内核中map实现通信。为了防止注入的代码导致内核崩溃，eBPF会对注入的代码进行严格检查，拒绝不合格的代码的注]]></description><category></category></item></channel></rss>