Dynamic Linking
blog.stephenmarz.com
blog.stephenmarz.com
I know FreeBSD has such a call, but not Linux, and the only place i've found this was an implementation in Android, in its specialized linker that will manage to do this, but by meddling directly with the elf headers within the file.
Why i cant use the one who just uses the path? I want to load from memory (without resorting to create the file in temp fs), and for this i would use the memfd_create().
Anyway, i just want to know if there are any way to do this in Linux without having to "manually" do this by using libelf, DT_HASH, etc..
(Also in case i need to resort to elf, i bet i will be forced to do dependency resolution by hand, which will be pretty nasty just to be able to have this feature)
I think you'd be able to do something like dlopen("/proc/self/fd/4") where 4 is your open file descriptor, but I'm not 100% on that.
Note that in my use case i will/can pass the file descriptors to the child process, so that's why memfd_create suited me well. But if you happen to know how i can just use the mmaped file, as long as i can point the exact offset to be readed, it will be much better, because it will be basically a zero-copy implementation of it.
(If memfd_create() could be created by passing the memory address, without the need to use a write() in the created fd, it would also be much less expensive)
Thank you for your tip, that is a really nice trick!
Thinking out loud, but vmsplice into a memfd (possibly through a pipe) might allow you to populate the memfd without any copy.
This is what i've been looking for, as the child process is sandboxed and it's good to have a option where there's no need to access the filesystem to work some things out.
This is pretty good, thank you. I've passed through vmsplice here and there.. but as i didn't need to use it, i've completely forgot about its existence. So thank you for this good reminder of a great syscall.