У меня есть такая структура
[StructLayout(LayoutKind.Sequential)]
internal struct Context
{
internal uint ContextFlags;
private readonly IntPtr Dr0;
private readonly IntPtr Dr1;
private readonly IntPtr Dr2;
private readonly IntPtr Dr3;
private readonly IntPtr Dr6;
private readonly IntPtr Dr7;
private readonly FloatingSaveArea FloatingSave;
private readonly IntPtr SegGs;
private readonly IntPtr SegFs;
private readonly IntPtr SegEs;
private readonly IntPtr SegDs;
private readonly IntPtr Edi;
private readonly IntPtr Esi;
private readonly IntPtr Ebx;
private readonly IntPtr Edx;
private readonly IntPtr Ecx;
private readonly IntPtr Eax;
private readonly IntPtr Ebp;
internal IntPtr Eip;
private readonly IntPtr SegCs;
private readonly IntPtr EFlags;
private readonly IntPtr Esp;
private readonly IntPtr SegSs;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
private readonly byte[] ExtendedRegisters;
}
Она заполнена данными с использованием следующего метода pinvoke
[DllImport("kernel32.dll")]
internal static extern bool GetThreadContext(IntPtr hThread, ref Context lpContext);
Мне нужен только доступ к переменным ContextFlags
и Eip
В идеале я хотел бы удалить все остальные переменные из структуры, которая мне не нужна, однако, когда я делаю это, переменная Eip
больше не заполняется правильным значением.
Я также попробовал следующее
[StructLayout(LayoutKind.Explicit)]
internal struct Context
{
[FieldOffset(0)]
internal uint ContextFlags;
[FieldOffset(184)]
internal IntPtr Eip;
}
Смещение поля 184 происходит от
uint offsetEip = (uint) Marshal.OffsetOf(typeof(Context), "Eip");
Это также не работает
Есть лиспособ достичь этого?Может быть, с помощью класса вместо структуры?