В винде есть процессы, для каждого из процессов имеется адресное пространство (4 гб для 32-битных, и гораздо больше для 64-битных).
Так же у процесса могут быть библиотеки, которые располагаются в этом адресном пространстве.
Управлением этими библиотеками занимается загрузчик (Loader), его код находится в юзермоде в ntdll.dll.
Загружается библиотека через LoadLibrary, при этом внутри библиотеки всегда есть точка входа DllMain которая получает управление в конце загрузки и выполняется в контексте блокировки загрузчика (поэтому там нельзя делать некоторые операции).
Выгружается библиотека через FreeLibrary, при этом опять вызывается DllMain с другим кодом, либо библиотека сама может это сделать через FreeLibraryAndExitThread.
Весь стандартный функционал можно посмотреть тут
.
Найти адрес библиотеки можно через GetModuleHandle по имени, а найти экспортируемую функцию внутри модуля через GetProcAddress.
Стоит упомянуть что в читах часто применяет мануал мап, это по сути тот же функционал что и в загрузчике, только лишь код чита сам выделяет память и располагает там модуль, а так же не добавляет загруженный модуль в список модулей, что делает модуль менее обнаруживаемым.