
Сообщение от
Oleg N. Cher
Что же тогда .NET если не платформа? Фреймворк? Набор классов?
в .net штатно можно работать с памятью, указатели, запрос памяти у операциоки итд, т.е. после jit будет не JNI шлюзы а очень часто обычный call
тобиш результат дотнета это не процес в какой то виртуальном окружении, а обычный процесс ну с библиотечками разными, ну проверок больше чем хотелось бы
на C#
Код:
class Program
{
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
const int SW_SHOW = 5;
static void Main(string[] args)
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
Console.Read();
}
}
листинг на ассемблере
Код:
var handle = GetConsoleWindow();
00000000 push ebp
00000001 mov ebp,esp
00000003 sub esp,14h
00000006 xor eax,eax
00000008 mov dword ptr [ebp-0Ch],eax
0000000b mov dword ptr [ebp-10h],eax
0000000e mov dword ptr [ebp-14h],eax
00000011 mov dword ptr [ebp-4],ecx
00000014 cmp dword ptr ds:[0215C730h],0
0000001b je 00000022
0000001d call 5DD39FEF
00000022 xor edx,edx
00000024 mov dword ptr [ebp-8],edx
00000027 call FFFFF8B0
0000002c mov dword ptr [ebp-0Ch],eax
0000002f mov eax,dword ptr [ebp-0Ch]
00000032 mov dword ptr [ebp-8],eax
ShowWindow(handle, SW_HIDE);
00000035 mov ecx,dword ptr [ebp-8]
00000038 xor edx,edx
0000003a call FFFFF8BC
0000003f mov dword ptr [ebp-10h],eax
00000042 nop
Console.Read();
00000043 call 5D1EF8EC
00000048 mov dword ptr [ebp-14h],eax
0000004b nop
}
если пошагать, то вызов нативных методов как раз в ядро винды уходят после линковки