Thomas-- We had a chance to discuss this a bit at our group meeting this morning. I think the simplest solution here is that, if no section headers are present, we should create a .text Region and a .data Region corresponding to the loadable RX and RW segments respectively, and the chunks of code that presume shdrs is a non-empty vector should be reworked to iterate/check appropriately and not go off into empty space. Creating those regions should put Symtab back on a sound footing for feeding the rest of the components.
Is this a binary you can share with us for testing purposes? Was it generated with strip -R or some less standard toolchain? --bw ________________________________________ From: Dyninst-api <dyninst-api-boun...@cs.wisc.edu> on behalf of Thomas Dullien <thomasdull...@google.com> Sent: Thursday, January 11, 2018 4:45 AM To: dyninst-api Subject: Re: [DynInst_API:] segfault when trying to parse an ELF, dereferencing [0] in vector of size 0 Hey there, a quick update: The issue seems to be that the ELF file has legitimate shdrnum=0 in the header, which some of the other code is not prepared for. Cheers, Thomas On Thu, Jan 11, 2018 at 11:36 AM, Thomas Dullien <thomasdull...@google.com<mailto:thomasdull...@google.com>> wrote: Hey there, I am trying to run a particular ELF file through Dyninst, but I get a segfault in Elf_X.C: if (!shdrs[i]._elf) { The trouble is that shdrs is an empty vector, and i is 0, so we can't dereference at index 0. #0 Dyninst::Elf_X::get_shdr (this=this@entry=0x557c15ecf0a0, i=0) at /home/thomasdullien/Desktop/sources/dyninst/dyninst/elf/src/Elf_X.C:473 #1 0x00007fd72b83f43a in Dyninst::Elf_X::findDebugFile (this=0x557c15ecf0a0, origfilename="/home/thomasdullien/Downloads/foo.elf", output_name="", output_buffer=@0x7fff5398c320: 0x557c15ecf470 "/home/thomasdullien/Downloads/foo.elf", output_buffer_size=@0x7fff5398c 328: 93991432156048) at /home/thomasdullien/Desktop/sources/dyninst/dyninst/elf/src/Elf_X.C:1659 #2 0x00007fd72ba5b124 in Dyninst::Dwarf::DwarfHandle::locate_dbg_file (this=this@entry=0x557c15ecf3d0) at /home/thomasdullien/Desktop/sources/dyninst/dyninst/dwarf/src/dwarfHandle.C:80 #3 0x00007fd72ba5b29f in Dyninst::Dwarf::DwarfHandle::DwarfHandle (this=0x557c15ecf3d0, filename_=..., file_=<optimized out>, err_func_=<optimized out>) at /home/thomasdullien/Desktop/sources/dyninst/dyninst/dwarf/src/dwarfHandle.C:73 #4 0x00007fd72ba5b9ff in Dyninst::Dwarf::DwarfHandle::createDwarfHandle (filename_="/home/thomasdullien/Downloads/foo.elf", file_=file_@entry=0x557c15ecf0a0, err_func_=err_func_@entry=0x7fd72ba5b010 <Dyninst::Dwarf::DwarfHandle::defaultDwarfError(Dwarf_Error_s*, void* )>) at /home/thomasdullien/Desktop/sources/dyninst/dyninst/dwarf/src/dwarfHandle.C:249 Shall I try to dig further, or should this be sufficient to find the problem? Cheers & keep up the good work :-) Thomas _______________________________________________ Dyninst-api mailing list Dyninst-api@cs.wisc.edu https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api