示例#1
0
AuxvParser::AuxvParser(int pid_, unsigned addr_size_) :
   pid(pid_),
   ref_count(0),
   interpreter_base(0x0),
   vsyscall_base(0x0),
   vsyscall_text(0x0),
   vsyscall_end(0x0),
   found_vsyscall(false),
   phdr(0x0),
   page_size(0x0),
   addr_size(addr_size_)
{
   create_err = !readAuxvInfo();
}
示例#2
0
Frame process::preStackWalkInit(Frame startFrame)
{
   /* Do a special check for the vsyscall page.  Silently drop
      the page if it exists. The IA-64 doesn't use DWARF to unwind out of 
      the vsyscall page, so calcVsyscallFrame() is overkill.
   */
    if( getVsyscallStart() == 0x0 ) {
        if( ! readAuxvInfo() ) {
            /* We're probably on Linux 2.4; use default values. */
            setVsyscallRange( 0xffffffffffffe000, 0xfffffffffffff000 );
            setVsyscallData( NULL );
        }
    }
    Address next_pc = startFrame.getPC();
    if (next_pc >= getVsyscallStart() && next_pc < getVsyscallEnd()) {
       return startFrame.getCallerFrame();
    }
    return startFrame;
}