I think I understand what’s going on and know how to fix it. Can you send me 
this .so? I want to ensure that I fixed it. 

> On Apr 2, 2020, at 1:56 PM, Stan Cox <s...@redhat.com> wrote:
> 
> So what seems to happen (this is upstream sources) is when parsing 
> libXcursor.so.1.0.2 at the function "XcursorTryShapeBitmapCursor" (end of 
> .so):
> 00000000000085f0 <XcursorTryShapeBitmapCursor@@Base>:
>    85f0:       f3 0f 1e fa             endbr64
>    85f4:       41 57                   push   %r15
>    85f6:       41 56                   push   %r14
> ...
>    8712:       c3                      retq
>    8713:       e8 48 b0 ff ff          callq  3760 <__stack_chk_fail@plt>
> Disassembly of section .fini:
> 0000000000008718 <.fini>:
>    8718:       f3 0f 1e fa             endbr64
>    871c:       48 83 ec 08             sub    $0x8,%rsp
>    8720:       48 83 c4 08             add    $0x8,%rsp
>    8724:       c3                      retq
> 
> In 
> Dyninst::ParseAPI::Parser::parse_frame_one_iteration(Dyninst::ParseAPI::ParseFrame&,..)
> 
> The line:
> const unsigned char* bufferBegin = (const unsigned char 
> *)(func->region()->getPtrToInstruction(curAddr));
> 
> where func->region().{low,high} = 0
> yields bufferBegin is 0
> causing dec.start = 0
> and the decoder subsequently fails.
> 
> This m_buf.start check seems to bypass that, but is probably treating a 
> symptom and not a cause.
> 
> INSTRUCTION_EXPORT Instruction InstructionDecoder::decode()
>    {
>      if(!m_buf.start || m_buf.start >= m_buf.end) return Instruction();
>      return m_Impl->decode(m_buf);
>    }
> 
> I hit a later problem; analyzing that now.
> 
> PS  Do regions typically correspond to the storage space of a function? 
> block? other?

A region typically corresponds to a section in an ELF file. 

> 


_______________________________________________
Dyninst-api mailing list
Dyninst-api@cs.wisc.edu
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api

Reply via email to