[Lldb-commits] [PATCH] D55356: Add a method to get the "base" file address of an object file

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Tue Dec 11 11:58:08 PST 2018

On 11/12/2018 20:39, Jim Ingham wrote:
> Sections can have parents.  In MachO the text and data sections are actually contained in the TEXT and DATA segments respectively.  LLDB represents this by having an lldb_private::Section for the segment, and then all the sections in that segment are children of the parent Section (the MachO segment).  All the code that looks up addresses expects to potentially traverse this hierarchy.
> It seems to me that what you are describing should fit in the nesting model?
> Jim

Hmm.. that's an interesting idea. I'll have to think about that.

Does MachO enforce somehow that every section is fully contained in one 
segment? Because while that is true for elf in general, it is not a 
requirement, and it is possible to create functional executables (though 
I think I would have to use a hex editor for that) where one segment 
contains only a half of some section. But that might not be a big issue, 
as I think most tools will choke on files like this, so if we do 
something suboptimal here, it shouldn't be too bad.

The other hickup I can think of is that sometimes (and this happens in 
perfectly valid files too) one section is present in multiple segments. 
For example .eh_frame will be present in a "LOAD" segment (so it ends up 
in memory), but it will also be present in a special "GNU_EH_FRAME" 
segment (not sure why, but I guess it's to make it easier for someone to 
find it). But I think I can get around that by only creating these 
"container" sections for LOAD segments.

The part I know nothing about is whether something similar could be done 
for PE/COFF files (and I'll need something like that there too). Adrian, 
Zachary, what is the relation ship between "image base" of an object 
file and its sections? Is there any way we could arrange so that the 
base address of a module always belongs to one of its sections?


More information about the lldb-commits mailing list