Thanks, that was exactly the case, I decoded past the end of a file.

I made the wrong assumption that any function must end with a ret
instruction, and I decoded addresses until I encountered the first ret
instruction. Such, every time there was a function at the end of a file
which wouldn't end in a with a ret, the segfault was thrown.

On Wed, Jul 8, 2015 at 6:31 PM, Bill Williams <b...@cs.wisc.edu> wrote:

> On 07/05/2015 02:22 PM, Alin Mîndroc wrote:
>
>> Hi everyone,
>>
>> I am using DyninstAPI for a project involving disassembling files, and
>> it worked perfectly until I had to use it on archive files (static
>> libraries .a).
>>
>> When I try to get the assembly code for librt.a, a segfault is raised
>> inside the "ia32_decode_prefixes" method. The strange thing is that it
>> fails for a "call" instruction (hex code e8 00 00 00 00), which was
>> already parsed successfully before in another function.
>>
>> Currently, my way of getting assembly code for a function is to
>> instantiate a decoder:
>> decoder(currentFunction->isrc()->getPtrToInstruction(crtaddr),
>> InstructionDecoder::maxInstructionLength,
>> currentFunction->isrc()->getArch());
>> Where crtaddr is (last instruction address) + (last instruction size)
>> Then, the segfault is thrown for the "call" instruction when I call the
>> decode() method on this InstructionDecoder instance.
>>
>> Any hints on this? Is there any other way of getting assembly code for
>> an archive file?
>>
>>  I'd valgrind this. It sounds to me like either your decode buffer has
> gone away somehow or you've overrun it; max instruction length could in
> fact hit a buffer overrun at the end of a mapped-in file.
>
> If you're just doing a linear scan disassemble, you can create a decoder
> with the full size of the buffer and iteratively decode; that's a safer
> approach (assuming that your problem is in fact a buffer overrun).
>
>  Thanks,
>> Alin
>>
>>
>> _______________________________________________
>> Dyninst-api mailing list
>> Dyninst-api@cs.wisc.edu
>> https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api
>>
>>
>
> --
> --bw
>
> Bill Williams
> Paradyn Project
> b...@cs.wisc.edu
> _______________________________________________
> Dyninst-api mailing list
> Dyninst-api@cs.wisc.edu
> https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api
>
_______________________________________________
Dyninst-api mailing list
Dyninst-api@cs.wisc.edu
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api

Reply via email to