Eine "gemeinsame Sprachlaufzeit erkannte ein ungültiges Programm". Fehler beim Versuch, ReadUnaligned mit DynamicMethod

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Eine "gemeinsame Sprachlaufzeit erkannte ein ungültiges Programm". Fehler beim Versuch, ReadUnaligned mit DynamicMethod

by Anonymous » 13 Apr 2025, 21:33

Ich versuche, den IL -Code für die ASP.NET -Kernmethode ReadUnaligned wie im .NET -Framework mit DynamicMethod nach diesem Beispiel zu kartieren. /> Mein Code: < /p>

Code: Select all

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>
Der Aufruf zur Methode lautet: < /p>
var buffer = new byte[Unsafe.SizeOf()];

ReadProcessMemory(_processHandle, baseAddress, ref buffer[0], buffer.Length, out var numberOfBytesRead);

ReadUnaligned(buffer[0]);
wobei ReadProcessMemory aus Kernel32.dll :
entnommen wird

Code: Select all

[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool ReadProcessMemory(SafeProcessHandle processHandle, IntPtr baseAddress, ref byte buffer, int bufferSize, out int numberOfBytesRead);
Irgendeine Idee, was ich falsch mache?

Top