diff options
author | Greg Clayton <gclayton@apple.com> | 2012-05-25 18:09:55 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2012-05-25 18:09:55 +0000 |
commit | 4d78c4082586e69dc5e5f6fd5aca033db3237732 (patch) | |
tree | 2b5685ab0a3616e0db741c5aa067fdc11b2f8b7d /lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp | |
parent | 67a498cc5fff03c5df11bc14d1913ce67e670528 (diff) | |
download | bcm5719-llvm-4d78c4082586e69dc5e5f6fd5aca033db3237732.tar.gz bcm5719-llvm-4d78c4082586e69dc5e5f6fd5aca033db3237732.zip |
<rdar://problem/11535465>
LC_ENCRYPTION_INFO with "cryptid == 0" is not actually encrypted and LLDB fails to read memory from file.
llvm-svn: 157487
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp')
-rw-r--r-- | lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp index ff643f4d283..7b0c2e78180 100644 --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp @@ -751,7 +751,6 @@ ObjectFileMachO::ParseSections () { lldb::user_id_t segID = 0; lldb::user_id_t sectID = 0; - struct segment_command_64 load_cmd; uint32_t offset = MachHeaderSizeFromMagic(m_header.magic); uint32_t i; const bool is_core = GetType() == eTypeCoreFile; @@ -760,24 +759,32 @@ ObjectFileMachO::ParseSections () // First look up any LC_ENCRYPTION_INFO load commands typedef RangeArray<uint32_t, uint32_t, 8> EncryptedFileRanges; EncryptedFileRanges encrypted_file_ranges; + encryption_info_command encryption_cmd; for (i=0; i<m_header.ncmds; ++i) { const uint32_t load_cmd_offset = offset; - if (m_data.GetU32(&offset, &load_cmd, 2) == NULL) + if (m_data.GetU32(&offset, &encryption_cmd, 2) == NULL) break; - if (load_cmd.cmd == LoadCommandEncryptionInfo) + if (encryption_cmd.cmd == LoadCommandEncryptionInfo) { - EncryptedFileRanges::Entry entry; - entry.SetRangeBase(m_data.GetU32(&offset)); - entry.SetByteSize(m_data.GetU32(&offset)); - encrypted_file_ranges.Append(entry); + if (m_data.GetU32(&offset, &encryption_cmd.cryptoff, 3)) + { + if (encryption_cmd.cryptid != 0) + { + EncryptedFileRanges::Entry entry; + entry.SetRangeBase(encryption_cmd.cryptoff); + entry.SetByteSize(encryption_cmd.cryptsize); + encrypted_file_ranges.Append(entry); + } + } } - offset = load_cmd_offset + load_cmd.cmdsize; + offset = load_cmd_offset + encryption_cmd.cmdsize; } offset = MachHeaderSizeFromMagic(m_header.magic); + struct segment_command_64 load_cmd; for (i=0; i<m_header.ncmds; ++i) { const uint32_t load_cmd_offset = offset; |