Как приложение общается с Windows
Смотрите. Я пишу Win32 приложение. Обращаюсь к функциям Win API. Для меня все просто - компилятор сам обеспечивает вызов. Но - суть вопроса - а как компилятор узнает, где живут функции API? Я вижу два варианта - либо есть какой-то фиксированный адрес. Но это вряд ли, в защищенной-то системе. И вторая версия - при запуске Windows передает приложению какой-то указатель. Короче, кто-нибудь знает, как это устроено?
Дополнено (1). Еще раз акцентирую внимание. Мне нужно узнать именно то, что многоуважаемый Дед Мазай в своем ответе (см. Ответ многоуважаемого Деда Мазая) обозначил как "программисту не обязательно это знать". Я, в общем-то, с ним до сегодняшнего дня был согласен. Но сегодня мне эта информация как раз понадобилась. К тому и вопрос. Считайте, что я хочу написать программу без компилятора, в машинных кодах (могу я себе позволить маленький такой каприз). И мне нужно получить доступ к функциям WIN API.
Программа на C/C++ через библиотеки импорта ссылается на стандартные системные DLL Windows. Функции в этих DLL описаны в документации как функции Windows API. Посмотри описание функций в документации, там всегда указана DLL.
Как эти DLL вызывают ядро ОС - это тема внутреннего устройства Windows. Программисту не обязательно это знать.
Компилятор не знает, где находятся библиотечные функции. Компилятор видит только заголовочные файлы. Из них он узнаёт о существовании этих функций, об их параметрах и о способе передачи параметров. Для компилятора это внешние функции. Подключение библиотек (в том числе библиотек импорта) - это работа линковщика.
В интернете есть книга
Рихтер Джеффри. Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows
Там подробно рассказано о способах подключения DLL. И ещё много чего (что я не знаю).
Типичная информация из документации по WinAPI:
Library Kernel32.lib -- библиотека импорта. Через неё подключается DLL
DLL Kernel32.dll -- DLL, в которой содержится функция.
Условная адресация. Обращается по смещению наасколько я помню.
Функции WinAPI в библиотеке WinAPI. Куда они дальше обращаются вряд ли известно это уже внутренняя архитектура ОС. Может это даже каким копирайтом защищено. Но принцип тот же - цепочка библиотек (включая драйверы), вызывающих друг друга.
Есть еще стандартные функции BIOS для работы с железом. Они в справочниках есть. Винда их мало использует, у нее свои драйвера для этого. Но если самому систему писать, то можно использовать для стандартных операций.
- Приложение сбербанк онлайн существует ли приложение сбербанк онлайн для устройств с windows xp Приложение сбербанк онлайн существует ли приложение "сбербанк онлайн" для устройств с "windows xp"
- В Диспетчере задач Винды приложение Бездействие системы грузит процессор на 99 % . Как удалить это приложение? В Диспетчере задач Винды приложение "Бездействие системы" грузит процессор на 99 % . Как удалить это приложение?
- Безопасно ли приложение если виндовс пишет - вы точно хотите чтоб это приложение делало изменение на вашем устройстве Приложение проверенно Касперским но я почему то все равно сомневаюсь. Потому что приложение пиратское, но сайт с которого скачивала выглядит безопасным
- Как сделать такую подсветку как в Windows 10 которая показывает какой приложение запущено только на Windows 7? Мне не нужна полностью тема Windows 10, мне только подсветка.