Код: Выделить всё
private delegate T ReadUnalignedInvoker(ref byte input);
private delegate TReturn OneParameter(TParameter0 p0);
public static T ReadUnaligned(U source)
{
Type[] methodArgsTypes = { typeof(U) };
var dm = new DynamicMethod("ReadUnaligned", typeof(T), methodArgsTypes, typeof(SizeHelper).Module);
ILGenerator il = dm.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Unaligned, (byte)0x1);
il.Emit(OpCodes.Ldobj);
il.Emit(OpCodes.Ret);
OneParameter invoker = (OneParameter)dm.CreateDelegate(typeof(OneParameter));
return invoker(source);
}
< /code>
Вызов метода: < /p>
var buffer = new byte[Unsafe.SizeOf()];
ReadProcessMemory(_processHandle, baseAddress, ref buffer[0], buffer.Length, out var numberOfBytesRead);
ReadUnaligned(buffer[0]);
Код: Выделить всё
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool ReadProcessMemory(SafeProcessHandle processHandle, IntPtr baseAddress, ref byte buffer, int bufferSize, out int numberOfBytesRead);
Подробнее здесь: https://stackoverflow.com/questions/617 ... -when-tryi