KasperskyOS Community Edition 1.3

Управление виртуальной памятью (vmm_api.h)

API определен в заголовочном файле sysroot-*-kos/include/coresrv/vmm/vmm_api.h из состава KasperskyOS SDK.

API предназначен для выделения и освобождения памяти, создания разделяемой памяти, а также подготовки сегментов ELF-образа к загрузке в память процесса.

В этом разделе

Выделение и освобождение памяти

Создание разделяемой памяти

Подготовка сегментов ELF-образа к загрузке в память процесса

В начало
[Topic libkos_vmm_api]

Выделение и освобождение памяти

Сведения о функциях API приведены в таблице ниже.

Использование API

Страницы виртуальной памяти могут быть свободными, зарезервированными или зафиксированными. Свободные страницы, которые были использованы для выделения региона виртуальной памяти, становятся зарезервированными. Зарезервированные страницы могут как отображаться, так и не отображаться на физическую память. Зарезервированные страницы, которые отображаются на физическую память, являются зафиксированными.

Фиксация страниц региона виртуальной памяти, который выделен вызовом функции KnVmAllocate(), может выполняться тремя способами:

  1. В полном объеме при выделении региона.
  2. В полном объеме или частично после выделения региона (вызовом функции KnVmCommit()).
  3. По мере обращения к виртуальным адресам (в "ленивом" режиме).

При использовании первого способа весь требуемый объем физической памяти выделяется сразу после резервирования региона виртуальной памяти. При использовании второго и третьего способов регион виртуальной памяти резервируется без выделения физической памяти. Это позволяет экономить физическую память, если зарезервированный регион виртуальной памяти фактически не потребуется или будет использован частично. Также выделение региона виртуальной памяти без фиксации быстрее, чем с фиксацией.

В "ленивом" режиме физическая память выделяется при фактическом обращении к региону виртуальной памяти. При этом фиксируется страница, содержащая адрес обращения, и несколько страниц до или после нее.

Если вызвать функцию KnVmAllocate() с флагами VMM_FLAG_COMMIT и VMM_FLAG_LOCKED, то будет зарезервирован регион виртуальной памяти с фиксацией в полном объеме. Если вызвать функцию KnVmAllocate() с флагом VMM_FLAG_COMMIT, но без флага VMM_FLAG_LOCKED, то будет зарезервирован регион виртуальной памяти с фиксацией в "ленивом" режиме. Если вызвать функцию KnVmAllocate() с флагом VMM_FLAG_LOCKED, но без флага VMM_FLAG_COMMIT, то будет зарезервирован регион виртуальной памяти без фиксации, а последующий вызов функции KnVmCommit() обеспечит фиксацию этого региона в полном объеме. Если вызвать функцию KnVmAllocate() без флагов VMM_FLAG_COMMIT и VMM_FLAG_LOCKED, то будет зарезервирован регион виртуальной памяти без фиксации, а последующий вызов функции KnVmCommit() обеспечит фиксацию этого региона в "ленивом" режиме.

При отображении буфера MDL, буфера DMA или региона памяти MMIO на память процесса выделяется регион виртуальной памяти. Этот регион выделяет функция, выполняющая отображение.

В начале и/или конце региона виртуальной памяти может располагаться охранная страница. Эта страница никогда не фиксируется, и при обращении к ней возникает исключение, которое сигнализирует о выходе за границы региона.

Чтобы изменить права доступа к региону виртуальной памяти, нужно вызвать функцию KnVmProtect(). Можно полностью закрыть, а затем снова открыть доступ к региону с сохранением содержимого.

Чтобы освободить физическую память, сохранив резервирование виртуальных адресов, нужно вызвать функцию KnVmDecommit() или KnVmReset(). При этом содержимое региона виртуальной памяти будет потеряно. После освобождения физической памяти вызовом функции KnVmDecommit() для последующего использования региона виртуальной памяти нужно вызвать функцию KnVmCommit(). После освобождения физической памяти вызовом функции KnVmReset() регион виртуальной памяти можно использовать без дополнительных действий. Этот регион виртуальной памяти будет соответствовать выделенному вызовом функции KnVmAllocate() с флагом VMM_FLAG_COMMIT, но без флага VMM_FLAG_LOCKED.

Функции KnVmProtect(), KnVmDecommit() и KnVmReset() нельзя использовать, если на регион виртуальной памяти отображен буфер MDL, буфер DMA или регион памяти MMIO.

Чтобы освободить регион виртуальной памяти, нужно вызвать функцию KnVmUnmap(). В результате вызова этой функции зарезервированные страницы становятся свободными независимо от того, зафиксированы они или нет, а также освобождается физическая память, отображенная на зафиксированные страницы.

Функция KnVmUnmap() освобождает виртуальные адреса региона, на который отображен буфер MDL, но не удаляет буфер MDL. Также эту функцию нельзя использовать, если на регион виртуальной памяти отображен буфер DMA или регион памяти MMIO.

Функции KnVmCommit(), KnVmProtect(), KnVmDecommit(), KnVmReset() и KnVmUnmap() можно применять как для всего выделенного региона виртуальной памяти, так и для его части.

Приведенные в этом разделе функции являются базой для реализации функций выделения и освобождения памяти библиотеки libkos, а также таких интерфейсов POSIX, как malloc(), calloc(), realloc(), free(), mmap(), munmap().

Сведения о функциях API

Функции vmm_api.h

Функция

Сведения о функции

KnVmAllocate()

Назначение

Выделяет (резервирует и опционально фиксирует) регион виртуальной памяти.

Параметры

  • [in,optional] addr – странично выровненный желаемый базовый адрес региона виртуальной памяти или 0, чтобы этот адрес был выбран автоматически.
  • [in] size – размер региона виртуальной памяти в байтах. Должен быть кратен размеру страницы памяти.
  • [in] flags – флаги, задающие параметры региона виртуальной памяти. Флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.

Возвращаемые значения

В случае успеха возвращает базовый адрес выделенного региона виртуальной памяти, иначе возвращает RTL_NULL.

Дополнительные сведения

В параметре flags можно указать следующие флаги:

  • VMM_FLAG_COMMIT – фиксация региона виртуальной памяти в "ленивом" режиме, когда страницы физической памяти выделяются по мере обращения к виртуальным адресам.
  • VMM_FLAG_LOCKED – фиксация региона виртуальной памяти с выделением всего требуемого объема физической памяти.
  • VMM_FLAG_READ, VMM_FLAG_WRITE, VMM_FLAG_EXECUTE и VMM_FLAG_RWX_MASK – флаги, задающие права доступа к региону виртуальной памяти.
  • VMM_FLAG_LOW_GUARD, VMM_FLAG_HIGH_GUARD – добавление охранной страницы в начало и конец региона виртуальной памяти соответственно. Размер охранной страницы не включается в размер региона виртуальной памяти.
  • VMM_FLAG_GROW_DOWN – определение направления, в котором выполняется отображение виртуальной памяти на физическую при "ленивом" режиме фиксации. Если флаг установлен, выполняется отображение страницы виртуальной памяти, содержащей адрес обращения, и нескольких предыдущих страниц. Если флаг не установлен, выполняется отображение страницы виртуальной памяти, содержащей адрес обращения, и нескольких последующих страниц.

Допустимые комбинации флагов, задающих права доступа к региону виртуальной памяти:

  • VMM_FLAG_READ – доступ на чтение.
  • VMM_FLAG_READ | VMM_FLAG_WRITE – доступ на чтение и запись.
  • VMM_FLAG_READ | VMM_FLAG_EXECUTE – доступ на чтение и исполнение.
  • VMM_FLAG_RWX_MASK или VMM_FLAG_READ | VMM_FLAG_WRITE | VMM_FLAG_EXECUTE – доступ на чтение, запись и исполнение.

KnVmCommit()

Назначение

Фиксирует регион виртуальной памяти.

Параметры

  • [in] addr – странично выровненный базовый адрес региона виртуальной памяти.
  • [in] size – размер региона виртуальной памяти в байтах. Должен быть кратен размеру страницы памяти.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KnVmDecommit()

Назначение

Отменяет фиксацию региона виртуальной памяти.

Параметры

  • [in] addr – странично выровненный базовый адрес региона виртуальной памяти.
  • [in] size – размер региона виртуальной памяти в байтах. Должен быть кратен размеру страницы памяти.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KnVmProtect()

Назначение

Изменяет права доступа к региону виртуальной памяти.

Параметры

  • [in] addr – странично выровненный базовый адрес региона виртуальной памяти.
  • [in] size – размер региона виртуальной памяти в байтах. Должен быть кратен размеру страницы памяти.
  • [in] newFlags – флаги, задающие права доступа к региону виртуальной памяти. Флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Дополнительные сведения

В параметре newFlags можно указать следующие комбинации флагов:

  • VMM_FLAG_READ – доступ на чтение.
  • VMM_FLAG_READ | VMM_FLAG_WRITE – доступ на чтение и запись.
  • VMM_FLAG_READ | VMM_FLAG_EXECUTE – доступ на чтение и исполнение.
  • VMM_FLAG_RWX_MASK или VMM_FLAG_READ | VMM_FLAG_WRITE | VMM_FLAG_EXECUTE – доступ на чтение, запись и исполнение.
  • 0 – доступ запрещен.

KnVmUnmap()

Назначение

Освобождает регион виртуальной памяти.

Параметры

  • [in] addr – странично выровненный базовый адрес региона виртуальной памяти.
  • [in] size – размер региона виртуальной памяти в байтах. Должен быть кратен размеру страницы памяти.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KnVmQuery()

Назначение

Позволяет получить сведения о странице виртуальной памяти.

Параметры

  • [in] addr – адрес, входящий в страницу виртуальной памяти.
  • [out] info – указатель на структуру, содержащую сведения о странице виртуальной памяти. Тип структуры определен в заголовочном файле sysroot-*-kos/include/vmm/info.h из состава KasperskyOS SDK.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KnVmReset()

Назначение

Отменяет фиксацию региона виртуальной памяти.

Параметры

  • [in] addr – странично выровненный базовый адрес региона виртуальной памяти.
  • [in] size – размер региона виртуальной памяти в байтах. Должен быть кратен размеру страницы памяти.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

В начало
[Topic libkos_vmm_api_base]

Создание разделяемой памяти

Сведения о функциях API приведены в таблице ниже.

Использование API

Для создания разделяемой памяти используется буфер MDL. Буфер MDL – это буфер, состоящий из одного или нескольких регионов физической памяти, которые могут быть отображены на память нескольких процессов одновременно. Для отображения буфера MDL на память процесса используется объект ядра – таблица описания памяти. Таблица описания памяти (англ. Memory Descriptor List, MDL) – структура данных, содержащая адреса и размеры регионов физической памяти, из которых состоит буфер MDL. Дескриптор буфера MDL идентифицирует таблицу описания памяти.

Чтобы создать разделяемую память, процессу нужно создать буфер MDL, отобразить его на свою память и передать дескриптор буфера MDL через IPC другим процессам, которым также нужно отобразить этот буфер MDL на свою память.

Чтобы создать буфер MDL, нужно вызвать функцию KnPmmMdlCreate(), KnPmmMdlCreateFromBuf() или KnPmmMdlCreateFromVm(). Функция KnPmmMdlCreateFromBuf() создает буфер MDL и копирует в него данные. Функция KnPmmMdlCreateFromVm() создает буфер MDL и отображает его на память вызывающего процесса.

Чтобы зарезервировать регион виртуальной памяти и отобразить на него буфер MDL, нужно вызвать функцию KnPmmMdlMap(). Буфер MDL можно отобразить на несколько регионов виртуальной памяти одного процесса.

Буфер MDL можно использовать для передачи больших объемов данных между процессами без создания разделяемой памяти. В этом случае необходимо обеспечить, чтобы буфер MDL не отображался на память нескольких процессов одновременно. Взаимодействующие процессы должны поочередно отображать буфер MDL в свою память, считывать и/или записывать данные и освобождать регион виртуальной памяти, на который отображен этот буфер MDL.

Модуль безопасности Kaspersky Security Module не может контролировать данные, которые передаются между процессами через буфер MDL.

Удаление буфера MDL

Чтобы удалить буфер MDL, нужно выполнить следующие шаги:

  1. Освободить регионы виртуальной памяти, на которые отображается буфер MDL, во всех процессах, которые используют этот буфер MDL.

    Чтобы выполнить этот шаг, нужно использовать функцию KnVmUnmap().

  2. Закрыть или отозвать каждый дескриптор буфера MDL во всех процессах, которые владеют этими дескрипторами.

    Чтобы выполнить этот шаг, нужно использовать функцию KnHandleClose() и/или KnHandleRevoke(), которые объявлены в заголовочном файле sysroot-*-kos/include/coresrv/handle/handle_api.h из состава KasperskyOS SDK.

Сведения о функциях API

Функции vmm_api.h

Функция

Сведения о функции

KnPmmMdlCreate()

Назначение

Создает буфер MDL.

Параметры

  • [in] size – размер буфера MDL в байтах. Должен быть кратен размеру страницы памяти.
  • [in] flags – флаги, задающие права доступа к буферу MDL. Тип параметра и флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.
  • [out] outHandle – указатель на дескриптор буфера MDL.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Дополнительные сведения

В параметре flags можно указать следующие комбинации флагов:

  • VMM_FLAG_READ – доступ на чтение.
  • VMM_FLAG_READ | VMM_FLAG_WRITE – доступ на чтение и запись.
  • VMM_FLAG_READ | VMM_FLAG_EXECUTE – доступ на чтение и исполнение.
  • VMM_FLAG_RWX_MASK или VMM_FLAG_READ | VMM_FLAG_WRITE | VMM_FLAG_EXECUTE – доступ на чтение, запись и исполнение.

KnPmmMdlCreateFromVm()

Назначение

Создает буфер MDL из физической памяти, отображенной на заданный регион виртуальной памяти, и отображает созданный буфер MDL на этот регион.

Параметры

  • [in] addr – странично выровненный базовый адрес региона виртуальной памяти.
  • [in] size – размер региона виртуальной памяти в байтах. Должен быть кратен размеру страницы памяти.
  • [in] flags – флаги, задающие права доступа к буферу MDL. Тип параметра и флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.
  • [out] outHandle – указатель на дескриптор буфера MDL.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Дополнительные сведения

Функцию можно использовать, если заданный регион виртуальной памяти выделен с фиксацией.

В параметре flags можно указать следующие комбинации флагов:

  • VMM_FLAG_READ – доступ на чтение.
  • VMM_FLAG_READ | VMM_FLAG_WRITE – доступ на чтение и запись.
  • VMM_FLAG_READ | VMM_FLAG_EXECUTE – доступ на чтение и исполнение.
  • VMM_FLAG_RWX_MASK или VMM_FLAG_READ | VMM_FLAG_WRITE | VMM_FLAG_EXECUTE – доступ на чтение, запись и исполнение.

KnPmmMdlCreateFromBuf()

Назначение

Создает буфер MDL и копирует в него данные из заданного буфера.

Параметры

  • [in] offset – смещение в буфере MDL, с которого нужно начать запись данных, в байтах.
  • [in] size – размер буфера MDL в байтах. Должен быть кратен размеру страницы памяти. Также должно выполняться условие: size>=bufSize+offset.
  • [in] flags – флаги, задающие права доступа к буферу MDL. Тип параметра и флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.
  • [in] buf – указатель на буфер с данными.
  • [in] bufSize – размер буфера с данными в байтах.
  • [out] outHandle – указатель на дескриптор буфера MDL.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Дополнительные сведения

В параметре flags можно указать следующие комбинации флагов:

  • VMM_FLAG_READ – доступ на чтение.
  • VMM_FLAG_READ | VMM_FLAG_WRITE – доступ на чтение и запись.
  • VMM_FLAG_READ | VMM_FLAG_EXECUTE – доступ на чтение и исполнение.
  • VMM_FLAG_RWX_MASK или VMM_FLAG_READ | VMM_FLAG_WRITE | VMM_FLAG_EXECUTE – доступ на чтение, запись и исполнение.

KnPmmMdlGetSize()

Назначение

Позволяет получить размер буфера MDL.

Параметры

  • [in] handle – дескриптор буфера MDL.
  • [out] size – размер буфера MDL в байтах.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KnPmmMdlMap()

Назначение

Резервирует регион виртуальной памяти и отображает на него буфер MDL.

Параметры

  • [in] handle – дескриптор буфера MDL.
  • [in] offset – смещение в буфере MDL, с которого нужно начать отображение, в байтах. Должно быть кратно размеру страницы памяти.
  • [in] length – размер части буфера MDL, которую нужно отобразить, в байтах. Должен быть кратен размеру страницы памяти. Также должно выполняться условие: length<=размер буфера MDL-offset.
  • [in,optional] hint – странично выровненный желаемый базовый адрес региона виртуальной памяти или 0, чтобы этот адрес был выбран автоматически.
  • [in] prots – флаги, задающие параметры региона виртуальной памяти. Флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.
  • [out] addr – указатель на базовый адрес региона виртуальной памяти.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Дополнительные сведения

В параметре prots можно указать следующие флаги:

  • VMM_FLAG_READ, VMM_FLAG_WRITE, VMM_FLAG_EXECUTE и VMM_FLAG_RWX_MASK – флаги, задающие права доступа к региону виртуальной памяти.
  • VMM_FLAG_LOW_GUARD, VMM_FLAG_HIGH_GUARD – добавление охранной страницы в начало и конец региона виртуальной памяти соответственно.

Допустимые комбинации флагов, задающих права доступа к региону виртуальной памяти:

  • VMM_FLAG_READ – доступ на чтение.
  • VMM_FLAG_READ | VMM_FLAG_WRITE – доступ на чтение и запись.
  • VMM_FLAG_READ | VMM_FLAG_EXECUTE – доступ на чтение и исполнение.
  • VMM_FLAG_RWX_MASK или VMM_FLAG_READ | VMM_FLAG_WRITE | VMM_FLAG_EXECUTE – доступ на чтение, запись и исполнение.

KnPmmMdlClone()

Назначение

Создает буфер MDL на основе существующего.

Буфер MDL создается из тех же регионов физической памяти, что и оригинальный.

Параметры

  • [in] origin – дескриптор оригинального буфера MDL.
  • [in] offset – смещение в оригинальном буфере MDL, с которого нужно начать дублирование, в байтах. Должно быть кратно размеру страницы памяти.
  • [in] length – размер части оригинального буфера MDL, которую нужно дублировать, в байтах. Должен быть кратен размеру страницы памяти. Также должно выполняться условие: length<=размер оригинального буфера MDL-offset.
  • [out] clone – указатель на дескриптор созданного буфера MDL.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

В начало
[Topic libkos_vmm_api_mdl]

Подготовка сегментов ELF-образа к загрузке в память процесса

Сведения о функциях API приведены в таблице ниже.

Использование API

Буферы MDL используются не только для создания разделяемой памяти, но и для загрузки сегментов ELF-образа в память нового процесса. (Загрузку сегментов ELF-образа выполняет, например, инициализирующая программа Einit.)

Функции KnVmSegInitFromVm() и KnVmSegInitFromBuf() создают буфер MDL и помещают в него сегмент ELF-образа для последующей загрузки этого сегмента в память нового процесса.

Удаление буферов MDL, содержащих сегменты ELF-образа

Чтобы буферы MDL, содержащие сегменты ELF-образа, были удалены, необходимо, чтобы завершился новый процесс, на память которого эти буферы MDL отображены. А также до или после завершения этого процесса нужно выполнить следующие шаги:

  1. Освободить регионы виртуальной памяти, на которые отображены буферы MDL, в процессе, который создал эти буферы MDL.

    Этот шаг нужно выполнить только для тех буферов MDL, которые созданы с использованием функции KnVmSegInitFromVm().

    Чтобы выполнить этот шаг, нужно использовать функцию KnVmUnmap().

  2. Закрыть дескрипторы буферов MDL в процессе, который создал эти буферы MDL.

    Чтобы выполнить этот шаг, нужно использовать функцию KnHandleClose(), которая объявлена в заголовочном файле sysroot-*-kos/include/coresrv/handle/handle_api.h из состава KasperskyOS SDK.

Сведения о функциях API

Функции vmm_api.h

Функция

Сведения о функции

KnVmSegInitFromVm()

Назначение

Создает буфер MDL из физической памяти, отображенной на заданный регион виртуальной памяти, который содержит сегмент ELF-образа.

Параметры

  • [out] seg – указатель на структуру, описывающую сегмент ELF-образа. Эта структура содержит дескриптор буфера MDL (поле h) и используется для загрузки сегмента ELF-образа в память процесса. Тип структуры определен в заголовочном файле sysroot-*-kos/include/coresrv/vmm/vmm_types.h из состава KasperskyOS SDK.
  • [in,optional] loadAddr – странично выровненный адрес загрузки сегмента ELF-образа в память процесса или 0, чтобы этот адрес был выбран автоматически.
  • [in] addr – странично выровненный базовый адрес региона виртуальной памяти.
  • [in] size – размер региона виртуальной памяти в байтах. Должен быть кратен размеру страницы памяти.
  • [in] flags – флаги, задающие права доступа к буферу MDL. Тип параметра и флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Дополнительные сведения

Функцию можно использовать, если заданный регион виртуальной памяти выделен с фиксацией.

В параметре flags можно указать следующие комбинации флагов:

  • VMM_FLAG_READ – доступ на чтение.
  • VMM_FLAG_READ | VMM_FLAG_WRITE – доступ на чтение и запись.
  • VMM_FLAG_READ | VMM_FLAG_EXECUTE – доступ на чтение и исполнение.
  • VMM_FLAG_RWX_MASK или VMM_FLAG_READ | VMM_FLAG_WRITE | VMM_FLAG_EXECUTE – доступ на чтение, запись и исполнение.

KnVmSegInitFromBuf()

Назначение

Создает буфер MDL и копирует в него сегмент ELF-образа из заданного буфера.

Параметры

  • [out] seg – указатель на структуру, описывающую сегмент ELF-образа. Эта структура содержит дескриптор буфера MDL (поле h) и используется для загрузки сегмента ELF-образа в память процесса. Тип структуры определен в заголовочном файле sysroot-*-kos/include/coresrv/vmm/vmm_types.h из состава KasperskyOS SDK.
  • [in,optional] loadAddr – странично выровненный адрес загрузки сегмента ELF-образа в память процесса или 0, чтобы этот адрес был выбран автоматически.
  • [in] offset – смещение в буфере MDL, с которого нужно начать запись сегмента ELF-образа, в байтах.
  • [in] size – размер сегмента ELF-образа в байтах. Должен быть кратен размеру страницы памяти.
  • [in] flags – флаги, задающие права доступа к буферу MDL. Тип параметра и флаги определены в заголовочном файле sysroot-*-kos/include/vmm/flags.h из состава KasperskyOS SDK.
  • [in] fileOffset – смещение сегмента в ELF-образе в байтах.
  • [in] buildId – указатель на идентификатор сборки. Компоновщик записывает этот идентификатор ELF-образ.
  • [in] buildIdSize – размер идентификатора сборки в байтах.
  • [in] buf – указатель на буфер, содержащий сегмент ELF-образа.
  • [in] bufSize – размер буфера, содержащего сегмент ELF-образа, в байтах.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Дополнительные сведения

В параметре flags можно указать следующие комбинации флагов:

  • VMM_FLAG_READ – доступ на чтение.
  • VMM_FLAG_READ | VMM_FLAG_WRITE – доступ на чтение и запись.
  • VMM_FLAG_READ | VMM_FLAG_EXECUTE – доступ на чтение и исполнение.
  • VMM_FLAG_RWX_MASK или VMM_FLAG_READ | VMM_FLAG_WRITE | VMM_FLAG_EXECUTE – доступ на чтение, запись и исполнение.

В начало
[Topic libkos_vmm_api_elf]