Что за класс DynamicILInfo,, Он вообще работаете.
Почему не работает метод SetCode, сколько не пытаюсь пробить Какие-то сигнатуры не верны, что за сигнатуры,токены.
Это же очевидно Что Hello World пример класса должен быть пример Копирование метод а
И открыл больше 40000 вкладок, не нашел ни одного примера, Где работают непосредственно с байт кодом полученным от метода GetILAsByteArray()
public static void test_1()
{
var method = new DynamicMethod("Test", typeof(void), Type.EmptyTypes);
var info = method.GetDynamicILInfo();
info.SetLocalSignature(new byte[] { 0x7, 0x0 }); /// Это вообще что такое
info.SetCode(new byte[] { 0x2a }, 1);
((Action)method.CreateDelegate(typeof(Action)))();
}
public static void test_2()
{
var method = new DynamicMethod("Test", typeof(void), Type.EmptyTypes);
var info = method.GetDynamicILInfo();
var sig= SignatureHelper.GetLocalVarSigHelper().GetSignature();
info.SetLocalSignature(sig);
var m = typeof(Program).GetMethod("M");
var b=m.GetMethodBody();
info.SetCode(b.GetILAsByteArray(), b.MaxStackSize);
((Action)method.CreateDelegate(typeof(Action)))();
}
public static void M( ) {}
// А такой никогда в жизни не запустится
// ПОЧЕМУ, в теле же метода все указано.
public static void M( ) {
//Console.WriteLine("HelloWorld");
}
Максимальное что можно скопировать, с пустым телом. Почему SetCode не работает, как наверное ожидает любой человек на земле?
Что за сигнатуры зачем нужны,
Я знаю что это в байт коде, но не понимаю, Где это достать, какие-то токены, сигнатуры, А где их получить то?
И все примеры вот такие, Ну это же полная ерунда какая-то.
public void Init()
{
byte[] buffer = new byte[] {
0x16, 10, 2, 2, 0x1f, 9, 0x25, 13, 0x7d, 100, 0, 0, 4, 9, 0x7d, 0x63,
0, 0, 4, 0x16, 11, 0x2b, 0x12, 2, 0x7b, 0x62, 0, 0, 4, 7, 0x91, 0x2d,
4, 6, 0x17, 0x58, 10, 7, 0x17, 0x58, 11, 7, 2, 0x7b, 0x62, 0, 0, 4,
0x8e, 0x69, 50, 0xe3, 2, 6, 0x8d, 0x3e, 0, 0, 1, 0x7d, 0x65, 0, 0, 4,
0x16, 10, 0x16, 12, 0x2b, 0x1b, 2, 0x7b, 0x62, 0, 0, 4, 8, 0x91, 0x2d, 13,
2, 0x7b, 0x65, 0, 0, 4, 6, 0x25, 0x17, 0x58, 10, 8, 0x9e, 8, 0x17, 0x58,
12, 8, 2, 0x7b, 0x62, 0, 0, 4, 0x8e, 0x69, 50, 0xda, 0x2a
};
Type[] arguments = new Type[] { typeof(int), typeof(int), typeof(int), typeof(int) };
Type[] resTypes = new Type[] {
typeof(TheGame), typeof(TheGame), typeof(TheGame), typeof(TheGame), typeof(int),
typeof(TheGame), typeof(TheGame), typeof(TheGame), typeof(TheGame)
};
string[] resVars = Transformer.Change(new string[] {
"+Nfs6fzp1+vn5P3l5g==", "+Nfs6fzp1/rn/w==", "+Nfs6fzp", "+Nfs6fzp", "web8u7o=",
"+Nfh5uzt8A==", "+Nfs6fzp", "+Nfh5uzt8A==", "+Nfs6fzp"
});
Type[][] funParamTypes = new Type[][] {
new Type[0], new Type[0], new Type[0], new Type[0], new Type[0],
new Type[0], new Type[0], new Type[0], new Type[0]
};
int[] index = new int[] { 9, 15, 0x19, 0x2c, 0x37, 60, 0x48, 0x52, 100 };
int maxStackSize = 4;
try
{
DynamicMethod method = new DynamicMethod("", typeof(void), new Type[] { typeof(TheGame) }, true);
DynamicILInfo dynamicILInfo = method.GetDynamicILInfo();
SignatureHelper localVarSigHelper = SignatureHelper.GetLocalVarSigHelper();
localVarSigHelper.AddArguments(arguments, null, null);
TokenResolver.Resolve(ref buffer, index, resTypes, resVars, funParamTypes, dynamicILInfo);
dynamicILInfo.SetCode(buffer, maxStackSize);
dynamicILInfo.SetLocalSignature(localVarSigHelper.GetSignature());
InitD td = (InitD) method.CreateDelegate(typeof(InitD), this);
td();
}
catch (Exception exception)
{
throw new GameProtectionException(exception.Message, exception);
}