本文整理汇总了C++中ProcessSP类的典型用法代码示例。如果您正苦于以下问题:C++ ProcessSP类的具体用法?C++ ProcessSP怎么用?C++ ProcessSP使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ProcessSP类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CalculateProcess
ProcessMonitor &
RegisterContext_i386::GetMonitor()
{
ProcessSP base = CalculateProcess();
ProcessPOSIX *process = static_cast<ProcessPOSIX*>(base.get());
return process->GetMonitor();
}
示例2: CalculateProcess
ProcessMonitor &
RegisterContextPOSIXProcessMonitor_powerpc::GetMonitor()
{
ProcessSP base = CalculateProcess();
ProcessFreeBSD *process = static_cast<ProcessFreeBSD*>(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: 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;
}
示例7: log
Thread::Thread (const ProcessSP &process_sp, lldb::tid_t tid) :
ThreadProperties (false),
UserID (tid),
m_process_wp (process_sp),
m_actual_stop_info_sp (),
m_index_id (process_sp->GetNextThreadIndexID ()),
m_reg_context_sp (),
m_state (eStateUnloaded),
m_state_mutex (Mutex::eMutexTypeRecursive),
m_plan_stack (),
m_completed_plan_stack(),
m_frame_mutex (Mutex::eMutexTypeRecursive),
m_curr_frames_sp (),
m_prev_frames_sp (),
m_resume_signal (LLDB_INVALID_SIGNAL_NUMBER),
m_resume_state (eStateRunning),
m_temporary_resume_state (eStateRunning),
m_unwinder_ap (),
m_destroy_called (false),
m_thread_stop_reason_stop_id (0)
{
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT));
if (log)
log->Printf ("%p Thread::Thread(tid = 0x%4.4llx)", this, GetID());
QueueFundamentalPlan(true);
}
示例8:
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;
}
示例9: Thread
ThreadGDBRemote::ThreadGDBRemote (const ProcessSP &process_sp, lldb::tid_t tid) :
Thread(process_sp, tid),
m_thread_name (),
m_dispatch_queue_name (),
m_thread_dispatch_qaddr (LLDB_INVALID_ADDRESS)
{
ProcessGDBRemoteLog::LogIf(GDBR_LOG_THREAD, "%p: ThreadGDBRemote::ThreadGDBRemote (pid = %i, tid = 0x%4.4x)",
this,
process_sp ? process_sp->GetID() : LLDB_INVALID_PROCESS_ID,
GetID());
}
示例10: ReadMemory
DataBufferSP ObjectFile::ReadMemory(const ProcessSP &process_sp,
lldb::addr_t addr, size_t byte_size) {
DataBufferSP data_sp;
if (process_sp) {
std::unique_ptr<DataBufferHeap> data_ap(new DataBufferHeap(byte_size, 0));
Error error;
const size_t bytes_read = process_sp->ReadMemory(
addr, data_ap->GetBytes(), data_ap->GetByteSize(), error);
if (bytes_read == byte_size)
data_sp.reset(data_ap.release());
}
return data_sp;
}
示例11: LoadInMemory
Status ObjectFile::LoadInMemory(Target &target, bool set_pc) {
Status error;
ProcessSP process = target.CalculateProcess();
if (!process)
return Status("No Process");
if (set_pc && !GetEntryPointAddress().IsValid())
return Status("No entry address in object file");
SectionList *section_list = GetSectionList();
if (!section_list)
return Status("No section in object file");
size_t section_count = section_list->GetNumSections(0);
for (size_t i = 0; i < section_count; ++i) {
SectionSP section_sp = section_list->GetSectionAtIndex(i);
addr_t addr = target.GetSectionLoadList().GetSectionLoadAddress(section_sp);
if (addr != LLDB_INVALID_ADDRESS) {
DataExtractor section_data;
// We can skip sections like bss
if (section_sp->GetFileSize() == 0)
continue;
section_sp->GetSectionData(section_data);
lldb::offset_t written = process->WriteMemory(
addr, section_data.GetDataStart(), section_data.GetByteSize(), error);
if (written != section_data.GetByteSize())
return error;
}
}
if (set_pc) {
ThreadList &thread_list = process->GetThreadList();
ThreadSP curr_thread(thread_list.GetSelectedThread());
RegisterContextSP reg_context(curr_thread->GetRegisterContext());
Address file_entry = GetEntryPointAddress();
reg_context->SetPC(file_entry.GetLoadAddress(&target));
}
return error;
}
示例12: 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));
}
示例13: 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;
}
示例14: 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())
//.........这里部分代码省略.........