Re: [PATCH bpf-next 0/3] libbpf: Make uprobe attachment APK aware

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Feb 21, 2023 at 3:35 PM Daniel Müller <deso@xxxxxxxxxx> wrote:
>
> On Sat, Feb 18, 2023 at 08:29:32PM +0000, Alan Maguire wrote:
> > On 17/02/2023 19:19, Daniel Müller wrote:
> > > On Android, APKs (android packages; zip packages with somewhat
> > > prescriptive contents) are first class citizens in the system: the
> > > shared objects contained in them don't exist in unpacked form on the
> > > file system. Rather, they are mmaped directly from within the archive
> > > and the archive is also what the kernel is aware of.
> > >
> > > For users that complicates the process of attaching a uprobe to a
> > > function contained in a shared object in one such APK: they'd have to
> > > find the byte offset of said function from the beginning of the archive.
> > > That is cumbersome to do manually and can be fragile, because various
> > > changes could invalidate said offset.
> > >
> > > That is why for uprobes inside ELF files (not inside an APK), commit
> > > d112c9ce249b ("libbpf: Support function name-based attach uprobes") added
> > > support for attaching to symbols by name. On Android, that mechanism
> > > currently does not work, because this logic is not APK aware.
> > >
> > > This patch set introduces first class support for attaching uprobes to
> > > functions inside ELF objects contained in APKs via function names. We
> > > add support for recognizing the following syntax for a binary path:
> > >   <archive>!/<binary-in-archive>
> > >
> > >   (e.g., /system/app/test-app.apk!/lib/arm64-v8a/libc++.so)
> > >
> > > This syntax is common in the Android eco system and used by tools such
> > > as simpleperf. It is also what is being proposed for bcc [0].
> > >
> > > If the user provides such a binary path, we find <binary-in-archive>
> > > (lib/arm64-v8a/libc++.so in the example) inside of <archive>
> > > (/system/app/test-app.apk). We perform the regular ELF offset search
> > > inside the binary and add that to the offset within the archive itself,
> > > to retrieve the offset at which to attach the uprobe.
> > >
> >
> > I have to look in a bit more depth here, but my first thought is if
> > we need the APK specifics in libbpf itself? Would having additional
> > uprobe opts that specify elf memory and some sort of "don't attach,
> > just figure out offset" flag work? Then you could perhaps do the work
> > in patch 3 outside of libbpf, calling attach once to get the
> > offset within the elf (using the changes in patch 2 to support ELF
> > memory), then a second time to do the attach using the offset previously
> > computed.
> >
> > Then you could implement the APK handling in a custom SEC() handler
> > which runs based on seeing an APK path or apk_uprobe/ prefix. Is that
> > approach feasible? I'm guessing there's something I'm missing, but it
> > would be good to understand what that is. Thanks!
>
> Thanks for taking a look! From what I understand what you laid out could work as
> well (though the devil may be in the detail here; I am not particularly familiar
> with custom SEC handlers and so unless it's being prototyped I can't say for
> certain).
> That being said, I am not sure I see how it is superior: it strikes me as more
> complicated just from a control flow and orchestration point of view. It also
> does not seem more user friendly to work with. As mentioned in the description,
> the proposed syntax addition is common in the eco system. I would think that
> supporting it benefits users, which in turn helps with adoption of libbpf usage
> on Android systems.
>

+1. Yes, a lot of stuff could be implemented with a custom SEC()
handler, but here the point is to have good out-of-the-box declarative
support for very typical APK-based attachments.

> Thanks,
> Daniel
>
> [...]




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux