<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Feb 13, 2017 at 10:41 AM, Sebastian Lackner <span dir="ltr"><<a href="mailto:sebastian@fds-team.de" target="_blank">sebastian@fds-team.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail-HOEnZb"><div class="gmail-h5"><br>
</div></div>Adding those fields should work, but it is a bit dangerous because we only have<br>
limited space. I would suggest adding asserts to ensure we never make this struct<br>
too big. Something like this should work:<br>
<br>
C_ASSERT( FIELD_OFFSET(TEB, SpareBytes1) + sizeof(struct ntdll_thread_data) <=<br>
          FIELD_OFFSET(TEB, GdiTebBatch) + sizeof(((TEB *)0)->GdiTebBatch) );<br>
<br></blockquote><div><br></div><div><div>Is the following acceptable:</div><div><br></div><div>C_ASSERT( sizeof(struct ntdll_thread_data) <= FIELD_OFFSET(TEB, gdiRgn) - FIELD_OFFSET(TEB, SpareBytes1) );</div><div><br></div><div>It should be equivalent, but it is shorter and has less parenthesis.</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Probably we should also use it for important i386 fields, to ensure they are not<br>
moved.<br>
<br>
#ifdef __i386__<br>
C_ASSERT( FIELD_OFFSET(TEB, SpareBytes1) + FIELD_OFFSET(struct ntdll_thread_data, vm86) == FIELD_OFFSET(TEB, GdiTebBatch) );<br>
C_ASSERT( FIELD_OFFSET(TEB, SpareBytes1) + FIELD_OFFSET(struct ntdll_thread_data, vm86) == 0x1fc );<br>
C_ASSERT( FIELD_OFFSET(TEB, SpareBytes1) + FIELD_OFFSET(struct ntdll_thread_data, gs)   == 0x1d8 );<br>
#endif<br>
<div><div class="gmail-h5"><br></div></div></blockquote></div><br></div><div class="gmail_extra">Looks good to me. I'll add that to the patch.</div><div class="gmail_extra"><br></div><div class="gmail_extra">-Andrew</div><div class="gmail_extra"><br></div></div>