本文整理汇总了C++中ProcessSP::get方法的典型用法代码示例。如果您正苦于以下问题:C++ ProcessSP::get方法的具体用法?C++ ProcessSP::get怎么用?C++ ProcessSP::get使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProcessSP
的用法示例。
在下文中一共展示了ProcessSP::get方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CalculateProcess
ProcessMonitor &
RegisterContextPOSIXProcessMonitor_powerpc::GetMonitor()
{
ProcessSP base = CalculateProcess();
ProcessFreeBSD *process = static_cast<ProcessFreeBSD*>(base.get());
return process->GetMonitor();
}
示例2: CalculateProcess
ProcessMonitor &
RegisterContext_i386::GetMonitor()
{
ProcessSP base = CalculateProcess();
ProcessPOSIX *process = static_cast<ProcessPOSIX*>(base.get());
return process->GetMonitor();
}
示例3: GetLoadAddress
addr_t
Address::GetCallableLoadAddress (Target *target, bool is_indirect) const
{
addr_t code_addr = LLDB_INVALID_ADDRESS;
if (is_indirect && target)
{
ProcessSP processSP = target->GetProcessSP();
Error error;
if (processSP.get())
{
code_addr = processSP->ResolveIndirectFunction(this, error);
if (!error.Success())
code_addr = LLDB_INVALID_ADDRESS;
}
}
else
{
code_addr = GetLoadAddress (target);
}
if (code_addr == LLDB_INVALID_ADDRESS)
return code_addr;
if (target)
return target->GetCallableLoadAddress (code_addr, GetAddressClass());
return code_addr;
}
示例4: modules_locker
MemoryHistorySP
MemoryHistoryASan::CreateInstance (const ProcessSP &process_sp)
{
if (!process_sp.get())
return NULL;
Target & target = process_sp->GetTarget();
const ModuleList &target_modules = target.GetImages();
Mutex::Locker modules_locker(target_modules.GetMutex());
const size_t num_modules = target_modules.GetSize();
for (size_t i = 0; i < num_modules; ++i)
{
Module *module_pointer = target_modules.GetModulePointerAtIndexUnlocked(i);
const Symbol* symbol = module_pointer->FindFirstSymbolWithNameAndType(
ConstString("__asan_get_alloc_stack"),
lldb::eSymbolTypeAny);
if (symbol != nullptr)
return MemoryHistorySP(new MemoryHistoryASan(process_sp));
}
return MemoryHistorySP();
}
示例5: RegisterContext
RegisterContextPOSIX_ppc64le::RegisterContextPOSIX_ppc64le(
Thread &thread, uint32_t concrete_frame_idx,
RegisterInfoInterface *register_info)
: RegisterContext(thread, concrete_frame_idx) {
m_register_info_ap.reset(register_info);
ProcessSP base = CalculateProcess();
if (base.get()->GetPluginName() == ProcessElfCore::GetPluginNameStatic())
return;
}
示例6:
SBTarget
SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
{
SBTarget sb_target;
if (m_opaque_sp)
{
// No need to lock, the target list is thread safe
sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
}
return sb_target;
}
示例7: GetLoadAddress
addr_t
Address::GetCallableLoadAddress (Target *target, bool is_indirect) const
{
if (is_indirect && target) {
ProcessSP processSP = target->GetProcessSP();
Error error;
if (processSP.get())
return processSP->ResolveIndirectFunction(this, error);
}
addr_t code_addr = GetLoadAddress (target);
if (target)
return target->GetCallableLoadAddress (code_addr, GetAddressClass());
return code_addr;
}
示例8: modules_locker
MemoryHistorySP
MemoryHistoryASan::CreateInstance (const ProcessSP &process_sp)
{
if (!process_sp.get())
return NULL;
Target & target = process_sp->GetTarget();
bool found_asan_runtime = false;
const ModuleList &target_modules = target.GetImages();
Mutex::Locker modules_locker(target_modules.GetMutex());
const size_t num_modules = target_modules.GetSize();
for (size_t i = 0; i < num_modules; ++i)
{
Module *module_pointer = target_modules.GetModulePointerAtIndexUnlocked(i);
SymbolContextList sc_list;
const bool include_symbols = true;
const bool append = true;
const bool include_inlines = true;
size_t num_matches = module_pointer->FindFunctions(ConstString("__asan_get_alloc_stack"), NULL, eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list);
if (num_matches)
{
found_asan_runtime = true;
break;
}
}
if (! found_asan_runtime)
return MemoryHistorySP();
return MemoryHistorySP(new MemoryHistoryASan(process_sp));
}
示例9: RegisterContext
RegisterContextPOSIX_x86::RegisterContextPOSIX_x86(
Thread &thread, uint32_t concrete_frame_idx,
RegisterInfoInterface *register_info)
: RegisterContext(thread, concrete_frame_idx) {
m_register_info_ap.reset(register_info);
switch (register_info->m_target_arch.GetMachine()) {
case llvm::Triple::x86:
m_reg_info.num_registers = k_num_registers_i386;
m_reg_info.num_gpr_registers = k_num_gpr_registers_i386;
m_reg_info.num_fpr_registers = k_num_fpr_registers_i386;
m_reg_info.num_avx_registers = k_num_avx_registers_i386;
m_reg_info.last_gpr = k_last_gpr_i386;
m_reg_info.first_fpr = k_first_fpr_i386;
m_reg_info.last_fpr = k_last_fpr_i386;
m_reg_info.first_st = lldb_st0_i386;
m_reg_info.last_st = lldb_st7_i386;
m_reg_info.first_mm = lldb_mm0_i386;
m_reg_info.last_mm = lldb_mm7_i386;
m_reg_info.first_xmm = lldb_xmm0_i386;
m_reg_info.last_xmm = lldb_xmm7_i386;
m_reg_info.first_ymm = lldb_ymm0_i386;
m_reg_info.last_ymm = lldb_ymm7_i386;
m_reg_info.first_dr = lldb_dr0_i386;
m_reg_info.gpr_flags = lldb_eflags_i386;
break;
case llvm::Triple::x86_64:
m_reg_info.num_registers = k_num_registers_x86_64;
m_reg_info.num_gpr_registers = k_num_gpr_registers_x86_64;
m_reg_info.num_fpr_registers = k_num_fpr_registers_x86_64;
m_reg_info.num_avx_registers = k_num_avx_registers_x86_64;
m_reg_info.last_gpr = k_last_gpr_x86_64;
m_reg_info.first_fpr = k_first_fpr_x86_64;
m_reg_info.last_fpr = k_last_fpr_x86_64;
m_reg_info.first_st = lldb_st0_x86_64;
m_reg_info.last_st = lldb_st7_x86_64;
m_reg_info.first_mm = lldb_mm0_x86_64;
m_reg_info.last_mm = lldb_mm7_x86_64;
m_reg_info.first_xmm = lldb_xmm0_x86_64;
m_reg_info.last_xmm = lldb_xmm15_x86_64;
m_reg_info.first_ymm = lldb_ymm0_x86_64;
m_reg_info.last_ymm = lldb_ymm15_x86_64;
m_reg_info.first_dr = lldb_dr0_x86_64;
m_reg_info.gpr_flags = lldb_rflags_x86_64;
break;
default:
assert(false && "Unhandled target architecture.");
break;
}
// Initialize m_iovec to point to the buffer and buffer size
// using the conventions of Berkeley style UIO structures, as required
// by PTRACE extensions.
m_iovec.iov_base = &m_fpr.xstate.xsave;
m_iovec.iov_len = sizeof(m_fpr.xstate.xsave);
::memset(&m_fpr, 0, sizeof(FPR));
// elf-core yet to support ReadFPR()
ProcessSP base = CalculateProcess();
if (base.get()->GetPluginName() == ProcessElfCore::GetPluginNameStatic())
return;
m_fpr_type = eNotValid;
}
示例10: guard
void
CompactUnwindInfo::ScanIndex (const ProcessSP &process_sp)
{
std::lock_guard<std::mutex> guard(m_mutex);
if (m_indexes_computed == eLazyBoolYes && m_unwindinfo_data_computed)
return;
// We can't read the index for some reason.
if (m_indexes_computed == eLazyBoolNo)
{
return;
}
Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_UNWIND));
if (log)
m_objfile.GetModule()->LogMessage(log, "Reading compact unwind first-level indexes");
if (m_unwindinfo_data_computed == false)
{
if (m_section_sp->IsEncrypted())
{
// Can't get section contents of a protected/encrypted section until we have a live
// process and can read them out of memory.
if (process_sp.get() == nullptr)
return;
m_section_contents_if_encrypted.reset (new DataBufferHeap (m_section_sp->GetByteSize(), 0));
Error error;
if (process_sp->ReadMemory (
m_section_sp->GetLoadBaseAddress (&process_sp->GetTarget()),
m_section_contents_if_encrypted->GetBytes(),
m_section_sp->GetByteSize(), error) == m_section_sp->GetByteSize() && error.Success())
{
m_unwindinfo_data.SetAddressByteSize (process_sp->GetTarget().GetArchitecture().GetAddressByteSize());
m_unwindinfo_data.SetByteOrder (process_sp->GetTarget().GetArchitecture().GetByteOrder());
m_unwindinfo_data.SetData (m_section_contents_if_encrypted, 0);
}
}
else
{
m_objfile.ReadSectionData (m_section_sp.get(), m_unwindinfo_data);
}
if (m_unwindinfo_data.GetByteSize() != m_section_sp->GetByteSize())
return;
m_unwindinfo_data_computed = true;
}
if (m_unwindinfo_data.GetByteSize() > 0)
{
offset_t offset = 0;
// struct unwind_info_section_header
// {
// uint32_t version; // UNWIND_SECTION_VERSION
// uint32_t commonEncodingsArraySectionOffset;
// uint32_t commonEncodingsArrayCount;
// uint32_t personalityArraySectionOffset;
// uint32_t personalityArrayCount;
// uint32_t indexSectionOffset;
// uint32_t indexCount;
m_unwind_header.version = m_unwindinfo_data.GetU32(&offset);
m_unwind_header.common_encodings_array_offset = m_unwindinfo_data.GetU32(&offset);
m_unwind_header.common_encodings_array_count = m_unwindinfo_data.GetU32(&offset);
m_unwind_header.personality_array_offset = m_unwindinfo_data.GetU32(&offset);
m_unwind_header.personality_array_count = m_unwindinfo_data.GetU32(&offset);
uint32_t indexSectionOffset = m_unwindinfo_data.GetU32(&offset);
uint32_t indexCount = m_unwindinfo_data.GetU32(&offset);
if (m_unwind_header.common_encodings_array_offset > m_unwindinfo_data.GetByteSize()
|| m_unwind_header.personality_array_offset > m_unwindinfo_data.GetByteSize()
|| indexSectionOffset > m_unwindinfo_data.GetByteSize()
|| offset > m_unwindinfo_data.GetByteSize())
{
Host::SystemLog (Host::eSystemLogError,
"error: Invalid offset encountered in compact unwind info, skipping\n");
// don't trust anything from this compact_unwind section if it looks
// blatantly invalid data in the header.
m_indexes_computed = eLazyBoolNo;
return;
}
// Parse the basic information from the indexes
// We wait to scan the second level page info until it's needed
// struct unwind_info_section_header_index_entry
// {
// uint32_t functionOffset;
// uint32_t secondLevelPagesSectionOffset;
// uint32_t lsdaIndexArraySectionOffset;
// };
offset = indexSectionOffset;
for (uint32_t idx = 0; idx < indexCount; idx++)
{
uint32_t function_offset = m_unwindinfo_data.GetU32(&offset); // functionOffset
uint32_t second_level_offset = m_unwindinfo_data.GetU32(&offset); // secondLevelPagesSectionOffset
uint32_t lsda_offset = m_unwindinfo_data.GetU32(&offset); // lsdaIndexArraySectionOffset
if (second_level_offset > m_section_sp->GetByteSize() || lsda_offset > m_section_sp->GetByteSize())
//.........这里部分代码省略.........