Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我在abc.bpf. c中 需要ring buffer,即使我不需要abc. h这样一个头文件,但是只要abc.bpf. c文件不include abc.h,ecli run就会显示export map named rb found,but no export type is provide。我为什么一定需要自定义一个头文件并且引用?为什么不能将头文件中的结构体类型直接放在. c文件中?否则就不能运行? #89

Open
Starryu opened this issue Jan 13, 2024 · 3 comments

Comments

@Starryu
Copy link

Starryu commented Jan 13, 2024

主要定义ringbuf的 SEC(". map")就会出错

@Officeyutong
Copy link
Contributor

Now ecc only supports detecting data struct definition from the header abc.h

@yunwei37
Copy link
Member

我们需要对应的类型信息,来确保 ecli 能正确的把对应的信息格式输出到用户态

@Starryu
Copy link
Author

Starryu commented Jan 13, 2024

我们需要对应的类型信息,来确保 ecli 能正确的把对应的信息格式输出到用户态

是指所有的struct都应该定义在头文件中吗,我在内核态需要强转tracing 函数的入参,强转的结构体需要在. h中定义,还是在. c文件定义也可以。
我现在遇到一个问题,强转的结构体是对照sys/kernel/debug/tracing/events/syscalls/某个系统调用/format里找到定义,假设是例如int a,int b,int c。我现在参考这个定义一个结构体,因为我hook的函数里入参是一个void指针,我需要强转。现在问题来了,及时我定义一样的结构体,解析第一个字段就会出现offset 越界,但是我可以确定我的结构体没有问题,因为我如果将结构体的前几位设置成同样大小的pading,例如int是4位,我设置的强转用的结构体是{pading[8];
int c_formyuse
}
那我就可以将c_formyuse解析出来,而如果反过来我定义的是
是{
int a_formyuse
pading[8];
}
那就会提示a_formyuse出错,似乎是越界。这是为什么?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants