Это зависит от типа buffer
.
Скорее всего, buffer
— это указатель на начало буфера. Объявление стиля C -для него может быть struct stackElement *buffer;
или что-то подобное (обратите внимание на звездочку! ). В этом случае:
p &buffer
печатает адрес, где хранится сам указатель (т.е. "адрес адреса буфера")p buffer
должен вывести значение переменной-указателя buffer
, которая является адресом буфера. p *buffer
должен распечатать содержимое буфера. Если buffer
является некоторым структурным типом, а не указателем, (пример объявления C может быть struct stackElement buffer;
без звездочки ), тогда:
p &buffer
печатает адрес, где находится структура, т.е. адрес буфера p buffer
выводит содержимое этой структуры (= если это стек, вероятно, первый элемент стека)p *buffer
— ошибка. Вот очень краткая попытка обобщить различия между тремя инструментами, которые вы упомянули, KVM
, LXC
и Firejail
. Он упускает из виду множество деталей и не претендует на то, чтобы быть скрупулезно точным, просто дает общее впечатление. Для получения более подробной информации вам придется провести некоторое исследование -, начните с чтения веб-сайтов программного обеспечения (, ссылки на которые приведены ниже ), а затем выполните поиск в Google (и Википедии )для получения дополнительной информации, как требуется.
Википедия особенно полезна для предоставления резюме технологий и ссылок на сравнительные таблицы аналогичного программного обеспечения.
KVM означает «Виртуальная машина с ядром» и предоставляет гипервизор для полной виртуализации, то есть эмуляции оборудования, позволяющий устанавливать и одновременно запускать несколько гостевых операционных систем на одном и том же оборудовании.
Каждая виртуальная машина видит совершенно другой набор эмулируемого оборудования (, включая жесткие диски, сетевые карты, консоль или графику и т. д. ), и может запускать собственное ядро. KVM также разрешает аппаратный доступ -через определенные устройства к определенным виртуальным машинам, поэтому они имеют эксклюзивный доступ к этому оборудованию (, например. второй графический процессор или конкретная сетевая карта ).
Вы можете использовать это, если хотите, например, запустить Linux и Windows, FreeBSD и Hackintosh на одной машине одновременно.
Это похоже на VirtualBox или VMWare.
См. также KVM в Википедии.
LXC представляет собой систему контейнеризации, которая использует ядро , группы управления и пространства имен(для PID, сетей, файловых систем и т. д. ), чтобы обеспечить достаточно сильную изоляцию между процессами. В отличие от виртуальной машины, все контейнеры работают на одном и том же ядре хоста, хотя обычно они имеют собственное (обычно минималистское )пользовательское пространство для предоставления своих собственных изолированных файлов /etc, /bin, /sbin и т. д.Разные контейнеры имеют доступ только к тем ресурсам хоста, которые им разрешено просматривать.
Он в основном используется для запуска системных или сетевых служб (, таких как apache или squid или bind )с большей изоляцией от ресурсов и процессов хост-системы, чем это достижимо только при использовании разных UID, GID и разрешений fs.
По своей концепции контейнеры очень похожи на тюрьмы FreeBSD. И докер . Systemd также предоставляет инструменты(systemd-nspawn
иmachinectl
)для использования и управления контрольными группами и пространствами имен.
См. также LXC в Википедии.
Я не использовал Firejail , но похоже, что это еще один инструмент контейнеризации, на этот раз с упором на использование конечными -пользователями, а не системными администраторами (, хотя это не кажется быть жестким ограничением, как раз то, на чем сосредоточены разработчики ).
напр. кажется, что это позволяет очень легко изолировать пользовательские процессы, такие как веб-браузеры или торрент-клиенты, так что компрометация таких приложений, работающих с Интернетом -, гораздо сложнее перерасти в компрометацию файлов пользователя или самой хост-ОС.