<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=utf-8">
<meta name="x_Generator" content="Microsoft Word 15 (filtered medium)">
<style>
<!--
@font-face
        {font-family:"Cambria Math"}
@font-face
        {font-family:Calibri}
p.x_MsoNormal, li.x_MsoNormal, div.x_MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif}
a:x_link, span.x_MsoHyperlink
        {color:blue;
        text-decoration:underline}
a:x_visited, span.x_MsoHyperlinkFollowed
        {color:#954F72;
        text-decoration:underline}
.x_MsoChpDefault
        {}
@page WordSection1
        {margin:72.0pt 72.0pt 72.0pt 72.0pt}
div.x_WordSection1
        {}
-->
</style>
<div lang="EN-AU" link="blue" vlink="#954F72">
<div class="x_WordSection1">
<p class="x_MsoNormal">Thanks! Disabling the cache worked.</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">Curiously, setting the line size seems to have no effect – it defaults to 512 (words, bytes, ...?), and still tries to read a page of guest memory regardless of how small I set it.</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">Andrew</p>
<p class="x_MsoNormal"> </p>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> jingham@apple.com <jingham@apple.com> on behalf of Jim Ingham <jingham@apple.com><br>
<b>Sent:</b> Thursday, June 21, 2018 11:32:03 AM<br>
<b>To:</b> Andrew Baumann<br>
<b>Cc:</b> lldb-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [lldb-dev] Accessing only specific words in guest memory</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:11pt;">
<div class="PlainText">By default, lldb uses a memory cache to avoid making lots of tiny memory requests, which tends to be inefficient especially when talking to a remote device.  You can turn this off with the "target.process.disable-memory-cache" setting.<br>
<br>
You can also adjust the cache page size with "target.process.memory-cache-line-size".<br>
<br>
We don't yet have a memory map command to tell us what regions to read and not to read.  So if you try to actually print the structure (with "frame var" or "expr") we will grab the whole thing.  But turning off the cache should allow you to avoid the disallowed
 regions manually.<br>
<br>
Jim<br>
<br>
> On Jun 21, 2018, at 11:20 AM, Andrew Baumann via lldb-dev <lldb-dev@lists.llvm.org> wrote:<br>
> <br>
> Hi,<br>
>  <br>
> I’m trying to use lldb 6.0 on Linux to debug a process that has an SGX enclave inside it. One of the data structures there (the “TCS”) only permits access to certain fields. The problem is that when I try to access those fields in LLDB, it tries to read an
 entire page of memory from the guest, even if I only wanted to read one word. It then fails the operation when access to later parts of the page fails.<br>
>  <br>
> e.g., this LLDB command:<br>
>  <br>
> (lldb) x/1g 0x200005000<br>
> error: memory read failed for 0x200005000<br>
>  <br>
> Triggered this series of failures in the lldb-server process:<br>
>  <br>
> read(7, "$x200005000,200#ed", 8192)     = 18<br>
> gettid()                                = 18169<br>
> process_vm_readv(18174, [{iov_base=0x556a00151cf0, iov_len=512}], 1, [{iov_base=0x200005000, iov_len=512}], 1, 0) = -1 EFAULT (Bad address)<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005000, [NULL]) = 0<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005008, [NULL]) = 0<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005010, [0xd000]) = 0<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005018, [0x300000001]) = 0<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005020, [0x1d950]) = 0<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005028, [0x3fffc00be750]) = 0<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005030, [0xa000]) = 0<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005038, [0xb000]) = 0<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005040, [0xffffffffffffffff]) = 0<br>
> ptrace(PTRACE_PEEKDATA, 18174, 0x200005048, 0x7ffc96125858) = -1 EIO (Input/output error)<br>
> write(7, "$E08#ad", 7)                  = 7<br>
>  <br>
> How can I convince lldb to access just the words I asked it for?<br>
>  <br>
> Thanks,<br>
> Andrew<br>
> _______________________________________________<br>
> lldb-dev mailing list<br>
> lldb-dev@lists.llvm.org<br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a><br>
<br>
</div>
</span></font>
</body>
</html>