c# или с++, или c# c dllImport, там вроде есть какие-то функции
Почему не получается сделать самому.
public static void test1()
{
a = a + b;
}
unsafe static void Main(string[] args)
{
delegate*<void> funcDelegate
= (delegate*<void>)typeof(Program).GetMethod("test1").MethodHandle.GetFunctionPointer();
funcDelegate ();
/// Это точно не байты функции. И вообще не могу понять что за байты
nint address= (nint)funcDelegate ;
Console.WriteLine(Marshal.ReadByte(address + 0).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 1).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 2).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 3).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 4).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 5).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 6).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 7).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 8).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 9).ToString("x16"));
Console.WriteLine(Marshal.ReadByte(address + 10).ToString("x16"))
size++;
}
Что такое funcDelegate, точнее что за адрес он хранит, как от него перейти к байтам кода.
mov rax,qword ptr [rbp-10h]
call rax
Вот я вижу такое до вызова,
почему переход происходит не на значения rax?
Значение rax 0x00007FFE532cc000
А след инструкция после call rax -> PC = 00007FFE53204560 ? // не тот адрес немного.
Почему переход в другое место
Как получить машинный байт код функции? Я знаю что ее длина там от 10 20 байтов, и последний байт
0xC3, хотя 100% уже ожидаю след ошибки. Есть ли какие-то библиотеки?
Что бы определить машинный код функции, и затем как можно объединить 2 функции в одну.
void fun1(){ count++;}
void fun2(){ count--;}
Как из них одну функцию сделать в Машином коде.