Date: Sun, 8 May 2022 13:39:10 +0200 From: Markus Wichmann <nullplan@....net> To: musl@...ts.openwall.com Subject: Re: Why the entries in the dynamic section are not always relocated? On Sun, May 08, 2022 at 08:48:29AM +0100, Pablo Galindo Salgado wrote: > Why is this happening? The easy question first: This is happening because glibc finds some value in writing the actual addresses into the dynamic section, and musl does not. All of the addresses given in the dynamic section must necessarily be offsets into the library itself (rather, the run-time map of the library), so anyone who knows the base address of the library can interpret these values, anyway. See, you are accessing an implementation detail here. I am not aware of any documentation of dl_iterate_phdr() which says whether the dynamic section is relocated or not. Which leads directly to: > How can one programmatically know when the linker is > going to place here offsets or full > relocated addresses? In general, you cannot. You could reconstruct the length of the library mapping from the LOAD headers, then heuristically assume that any value below that is an offset, and any value above it probably a pointer. Doesn't help you far, though, since you also need the base address. Though I suppose you could assume that the start of the page the PHDRs start on is likely the base of the library mapping. Also, the heuristic will fail for libraries mapped to a low address. In theory, all address space after the zero page is fair game, right? But libraries can take more space than that. And God help you if you ever run into an FDPIC architecture. It appears to me that whatever you are trying to do is not possible portibly on Linux at this time. Could you fill us in? Ciao, Markus
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.