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

能不能添加一个遍历ELF全部函数的方法 #14

Open
w296488320 opened this issue Aug 1, 2023 · 8 comments
Open

能不能添加一个遍历ELF全部函数的方法 #14

w296488320 opened this issue Aug 1, 2023 · 8 comments
Labels
enhancement New feature or request

Comments

@w296488320
Copy link

the Feature, Motivation and Pitch

有时候需要对函数插装,所以需要对全部的函数进行遍历,包括debug符号 。

Alternatives

No response

Additional context

No response

@w296488320 w296488320 added the enhancement New feature or request label Aug 1, 2023
@caikelun
Copy link
Member

caikelun commented Aug 1, 2023

确认是需要在运行时动态的遍历吗?如果是静态的在本地用 readelf 就可以了。
另外,你说的“封装”是指?

@w296488320
Copy link
Author

需要运行时遍历,因为很多so你懂的,都是执行时才会释放,我今天尝试改了一下,但是发现如果遍历debug和正常的动态链接符号,可能会有冲突,有的函数会便利两次。
可以搞个方法,参数1是句柄,参数2是函数指针callback ,参数3是是否需要debug符号。参数2里面记录被调用符号的信息啥的。
为啥要这个功能,因为我需要对一些函数用dobby插装 ,判断这个符号是否被调用。所以经常需要遍历一些符号。

@caikelun
Copy link
Member

caikelun commented Aug 1, 2023

需要运行时遍历,因为很多so你懂的,都是执行时才会释放,我今天尝试改了一下,但是发现如果遍历debug和正常的动态链接符号,可能会有冲突,有的函数会便利两次。 可以搞个方法,参数1是句柄,参数2是函数指针callback ,参数3是是否需要debug符号。参数2里面记录被调用符号的信息啥的。 为啥要这个功能,因为我需要对一些函数用dobby插装 ,判断这个符号是否被调用。所以经常需要遍历一些符号。

我理解你这还是静态遍历的需求?把执行时释放的so保存成文件,然后在本地用 readelf 查看就可以了?

@w296488320
Copy link
Author

嗯... 这也行的,但是我想的是能不能加个方法,内存遍历最好。因为我想运行时hook全部。:)

@caikelun
Copy link
Member

caikelun commented Aug 2, 2023

嗯,理解了,我有空加一下。

@caikelun
Copy link
Member

caikelun commented Aug 2, 2023

需要运行时遍历,因为很多so你懂的,都是执行时才会释放,我今天尝试改了一下,但是发现如果遍历debug和正常的动态链接符号,可能会有冲突,有的函数会便利两次。 可以搞个方法,参数1是句柄,参数2是函数指针callback ,参数3是是否需要debug符号。参数2里面记录被调用符号的信息啥的。 为啥要这个功能,因为我需要对一些函数用dobby插装 ,判断这个符号是否被调用。所以经常需要遍历一些符号。

“冲突”应该是有些符号同时被包含在了 .dynsym 和 .symtab 中,这两个 section 没有相互包含的关系,是允许存在重复符号的,所以需要去重。另外符号也分很多类型,你应该是只关心当前 ELF 的“导出函数”,需要过滤下。

@w296488320
Copy link
Author

感谢

@flyaway123
Copy link

请问这个功能有了么

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

No branches or pull requests

3 participants