MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Kакой компилятор использовался при компиляции операционной системы Windows 7?"
Answer 1031357
Windows - не монолитный проект, собираемый одним определенным набором инструментов. Но большая часть кода Windows, написанная на С и С++, собирается с помощью Microsoft Visual C++. Это можно легко понять по так называемой Rich-сигнатуре, которую компоновщик Visual C++ добавляет во все выходные PE-файлы между DOS-заголовком и заголовком PE. Есть и другие признаки - например, импорт функций из msvcrt.dll (стандартной библиотеки C из Visual C++); хотя само ядро их не импортирует и имеет свою, статически скомпонованную версию CRT.
Какова же версия Visual C++? Для определения (на примере ядра - ntoskrnl.exe) этого войдем в командную строку разработчика Visual Studio и выполним команду
dumpbin "%systemroot%\system32\ntoskrnl.exe" /headers
Результат:
Microsoft (R) COFF/PE Dumper Version 11.00.50727.1 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file C:\Windows\system32\ntoskrnl.exe PE signature found File Type: EXECUTABLE IMAGE FILE HEADER VALUES 8664 machine (x64) 18 number of sections 5D673542 time date stamp Thu Aug 29 07:15:30 2019 0 file pointer to symbol table 0 number of symbols F0 size of optional header 22 characteristics Executable Application can handle large (>2GB) addresses OPTIONAL HEADER VALUES 20B magic # (PE32+) 9.00 linker version 4AE200 size of code 11F400 size of initialized data 3600 size of uninitialized data 2A2AE0 entry point (00000001402A2AE0) 1000 base of code 140000000 image base (0000000140000000 to 00000001405DCFFF) 1000 section alignment 200 file alignment 6.01 operating system version 6.01 image version 6.01 subsystem version 0 Win32 version 5DD000 size of image 600 size of headers 558155 checksum 1 subsystem (Native) 0 DLL characteristics 80000 size of stack reserve 2000 size of stack commit 100000 size of heap reserve 1000 size of heap commit 0 loader flags 10 number of directories 528000 [ 10B09] RVA [size] of Export Directory 5A0B80 [ 78] RVA [size] of Import Directory 5A2000 [ 34570] RVA [size] of Resource Directory 274000 [ 28368] RVA [size] of Exception Directory 549A00 [ 21D0] RVA [size] of Certificates Directory 5D7000 [ 2130] RVA [size] of Base Relocation Directory 1390 [ 1C] RVA [size] of Debug Directory 0 [ 0] RVA [size] of Architecture Directory 0 [ 0] RVA [size] of Global Pointer Directory 0 [ 0] RVA [size] of Thread Storage Directory 0 [ 0] RVA [size] of Load Configuration Directory 0 [ 0] RVA [size] of Bound Import Directory 1000 [ 388] RVA [size] of Import Address Table Directory 0 [ 0] RVA [size] of Delay Import Directory 0 [ 0] RVA [size] of COM Descriptor Directory 0 [ 0] RVA [size] of Reserved Directory
Нас интересует поле linker version - оно равно 9.00, что соответствует Visual Studio 2008 (см таблицу версий Visual C++).
Можно более подробно определить версию вплоть до номера сборки, а также какое количество объектных файлов было скомпилировано каким компилятором, если воспользоваться программой для чтения вышеупомянутой недокументированной Rich-сигнатуры: https://github.com/dishather/richprint
Передавая ей ntoskrnl.exe, получаем:
@comp.id id version count description 00837809 83 30729 119 [ C ] VS2008 SP1 build 30729 00937809 93 30729 13 [IMP] VS2008 SP1 build 30729 00010000 1 0 150 [---] Unmarked objects 00957809 95 30729 81 [ASM] VS2008 SP1 build 30729 00897809 89 30729 848 00847809 84 30729 27 [C++] VS2008 SP1 build 30729 00927809 92 30729 1 [EXP] VS2008 SP1 build 30729 00947809 94 30729 1 00917809 91 30729 1 [LNK] VS2008 SP1 build 30729
Таким образом, ядро Windows 7 было собрано Visual C++ 9.0 build 30729 (Visual Studio 2008 SP1). Большая часть объектных файлов была скомпилирована компилятором С, меньше - MASM. (На машине, где производился анализ, Windows 7 SP1 Version 6.1.7601)
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.