003 File Manager
Current Path:
/usr/src/contrib/llvm-project/lldb/source/Plugins/Language/ObjC
usr
/
src
/
contrib
/
llvm-project
/
lldb
/
source
/
Plugins
/
Language
/
ObjC
/
📁
..
📄
CF.cpp
(8.75 KB)
📄
CF.h
(1.25 KB)
📄
CFBasicHash.cpp
(2.8 KB)
📄
CFBasicHash.h
(2.19 KB)
📄
Cocoa.cpp
(34.64 KB)
📄
Cocoa.h
(4.61 KB)
📄
CoreMedia.cpp
(3.03 KB)
📄
CoreMedia.h
(884 B)
📄
NSArray.cpp
(25.25 KB)
📄
NSDictionary.cpp
(37.47 KB)
📄
NSDictionary.h
(2.78 KB)
📄
NSError.cpp
(6.72 KB)
📄
NSException.cpp
(6.69 KB)
📄
NSIndexPath.cpp
(8.73 KB)
📄
NSSet.cpp
(24 KB)
📄
NSSet.h
(1.35 KB)
📄
NSString.cpp
(14.48 KB)
📄
NSString.h
(1.51 KB)
📄
ObjCLanguage.cpp
(45.73 KB)
📄
ObjCLanguage.h
(5.08 KB)
Editing: CFBasicHash.cpp
#include "CFBasicHash.h" #include "lldb/Utility/Endian.h" using namespace lldb; using namespace lldb_private; bool CFBasicHash::IsValid() const { if (m_address != LLDB_INVALID_ADDRESS) { if (m_ptr_size == 4 && m_ht_32) return true; else if (m_ptr_size == 8 && m_ht_64) return true; else return false; } return false; } bool CFBasicHash::Update(addr_t addr, ExecutionContextRef exe_ctx_rf) { if (addr == LLDB_INVALID_ADDRESS || !addr) return false; m_address = addr; m_exe_ctx_ref = exe_ctx_rf; m_ptr_size = m_exe_ctx_ref.GetTargetSP()->GetArchitecture().GetAddressByteSize(); m_byte_order = m_exe_ctx_ref.GetTargetSP()->GetArchitecture().GetByteOrder(); if (m_ptr_size == 4) return UpdateFor(m_ht_32); else if (m_ptr_size == 8) return UpdateFor(m_ht_64); return false; llvm_unreachable( "Unsupported architecture. Only 32bits and 64bits supported."); } template <typename T> bool CFBasicHash::UpdateFor(std::unique_ptr<__CFBasicHash<T>> &m_ht) { if (m_byte_order != endian::InlHostByteOrder()) return false; Status error; Target *target = m_exe_ctx_ref.GetTargetSP().get(); addr_t addr = m_address.GetLoadAddress(target); size_t size = sizeof(typename __CFBasicHash<T>::RuntimeBase) + sizeof(typename __CFBasicHash<T>::Bits); m_ht = std::make_unique<__CFBasicHash<T>>(); m_exe_ctx_ref.GetProcessSP()->ReadMemory(addr, m_ht.get(), size, error); if (error.Fail()) return false; m_mutable = !(m_ht->base.cfinfoa & (1 << 6)); m_multi = m_ht->bits.counts_offset; m_type = static_cast<HashType>(m_ht->bits.keys_offset); addr_t ptr_offset = addr + size; size_t ptr_count = GetPointerCount(); size = ptr_count * sizeof(T); m_exe_ctx_ref.GetProcessSP()->ReadMemory(ptr_offset, m_ht->pointers, size, error); if (error.Fail()) { m_ht = nullptr; return false; } return true; } size_t CFBasicHash::GetCount() const { if (!IsValid()) return 0; if (!m_multi) return (m_ptr_size == 4) ? m_ht_32->bits.used_buckets : m_ht_64->bits.used_buckets; // FIXME: Add support for multi return 0; } size_t CFBasicHash::GetPointerCount() const { if (!IsValid()) return 0; if (m_multi) return 3; // Bits::counts_offset; return (m_type == HashType::dict) + 1; } addr_t CFBasicHash::GetKeyPointer() const { if (!IsValid()) return LLDB_INVALID_ADDRESS; if (m_ptr_size == 4) return m_ht_32->pointers[m_ht_32->bits.keys_offset]; return m_ht_64->pointers[m_ht_64->bits.keys_offset]; } addr_t CFBasicHash::GetValuePointer() const { if (!IsValid()) return LLDB_INVALID_ADDRESS; if (m_ptr_size == 4) return m_ht_32->pointers[0]; return m_ht_64->pointers[0]; }
Upload File
Create Folder