Описание тега vdso
VDSO - это механизм ядра Linux для экспорта некоторых подпрограмм пространства ядра в пространство пользователя.
1
ответ
vdso gettimeofday с 64-битным ядром и приложением, скомпилированным для 32-битного
Поддерживается ли vdso для 32-битного приложения, работающего на 64-битном ядре с версией glibc 2.15? Если да, как я могу заставить его работать для 32-битного приложения, работающего на 64-битном ядре? Причина, даже если dlopen на "linux-vdso.so.1"…
17 авг '16 в 04:02
1
ответ
Какова процедура работы getpid в glibc?
Ситуация как ниже: Я пытаюсь сделать проект, который взламывает ядро в github. Версия ядра - linux-3.18.6. QEMU используется для моделирования окружающей среды. В моем приложении я пытаюсь понять процедуру syscall, следуя им. Способ достижения мое…
06 апр '17 в 08:25
4
ответа
Высокая загрузка ЦП системы из-за system.currentTimeMillis()
Я отлаживал высокую загрузку ЦП системы (не ЦП пользователя) на наших супервизорах (машина Wheezy). Вот наблюдения Вывод перф для соответствующего процесса: Events: 10K cpu-clock 16.40% java [kernel.kallsyms] [k] system_call_after_swapgs 13.95% java…
29 дек '17 в 18:45
0
ответов
Идентификация ифунков в VDSO
Я вижу в vdso, что все функции помечены как STT_FUNC вместо STT_GNU_IFUNC. Особенно я знаю, что "gettimeofday" - это Ifunc. Правда ли, что все функции в VDSO являются Ifuncs, поэтому они не помечены как таковые? если нет - Почему эти функции не поме…
22 сен '14 в 07:14
0
ответов
Перемещение VDSO на лету
Я пытаюсь выделить новый VDSO внутри моей программы из дампа памяти. Я нахожусь на "Linux user1-vbox 3.2.0-55-generic-pae #85-Ubuntu SMP Ср 2 октября 14:03:15 UTC 2013 i686 i686 i386 GNU/Linux" Проблема в: Замена памяти работает отлично вызов *%gs:0…
01 янв '14 в 17:58
2
ответа
Что такое vdso и vsyscall?
Я сделал sudo cat /proc/1/maps -vv Я пытаюсь разобраться в выводе. Я вижу, как многие общие библиотеки отображаются в сегмент отображения памяти, как и ожидалось. 7f3c00137000-7f3c00179000 r-xp 00000000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1…
12 ноя '13 в 19:37
0
ответов
Сделать функцию, реализованную как vDSO на самом деле системным вызовом?
Есть ли способ заставить это произойти (если не считать перекодирования каждого экземпляра вызова, скажем, time() быть призывом к syscall()?
17 фев '16 в 05:38
0
ответов
Как заставить vdso память быть в фиксированном адресе?
Похоже, что в исполняемом файле нет информации о том, где должен находиться vdso. Предполагая, что я могу контролировать, как программа компилируется, связывается и пишется, как я могу заставить ее быть по адресу, который я хочу?
15 апр '16 в 15:56
1
ответ
Linux системный вызов, libc, VDSO и анализ реализации
Я анализирую вызов syscall в последнем libc: git clone git://sourceware.org/git/glibc.git И у меня есть этот код в sysdeps/unix/sysv/linux/i386/sysdep.h: # define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ LOADREGS_##nr(args) \ asm volat…
31 янв '16 в 15:19
1
ответ
В чем разница между vdso32 и vdsox32?
Я прошу прощения, если ответ на этот вопрос очевиден, но почему существуют две версии[1] vdso для 32-битных исполняемых файлов в системах Linux, и какие критерии используются для выбора среди них? * как можно найти в /lib/modules/KERNEL_NAME/vdso
20 сен '18 в 06:08
0
ответов
Как найти адреса символов в vDSO по заданному адресу vDSO?
Я работаю над школьным исследованием уязвимости Грязной Коровы. Во время моего исследования я нашел несколько решений (например, это), которые вводят некоторый шелл-код в vDSO (в функцию __vdso_clock_gettime). Это решение и все его производные испол…
01 мар '18 в 13:15
1
ответ
gettimeofday() не использует vDSO?
Я связал Java-процесс, который запускал много времени в ядре, чтобы увидеть, какие системные вызовы использовались, и был удивлен, увидев, что gettimeofday() а также clock_gettime() доминирует (я подозреваю, что это из-за регистрации), что странно, …
06 мар '17 в 09:53
1
ответ
Захват ВДСО в страсе
Мне было интересно, есть ли способ перехвата (другими словами, наблюдения) вызовов VDSO, как gettimeofday в strace, Кроме того, есть ли способ выполнить двоичный файл без загрузки linux-vdso.so.1 (флаг или переменная env)? И, наконец, что, если я на…
29 июн '16 в 15:10
1
ответ
Откуда берутся mmaps `[stack]`, `[vdso]` и `[vsyscall]`?
Рассмотрим следующую программу, ориентированную на Linux x86_64: inf.s: .global _start .text _start: jmp _start Который в основном бесконечный цикл. Если я связываю и удаляю это, я получаю исполняемый файл ELF: $ gcc -nostdlib inf.s $ ./a.out & …
14 янв '13 в 07:16
2
ответа
Будет ли замедлено выполнение gettimeofday() из-за исправления недавно объявленной ошибки Intel?
Я оценивал влияние недавно объявленной ошибки Intel на мое приложение для обработки пакетов, используя netmap. До сих пор я измерял, что я обрабатываю около 50 пакетов на каждый poll() системный вызов сделан, но эта цифра не включает gettimeofday() …
03 янв '18 в 23:06
1
ответ
Как проверить всдо перемен?
Я хотел бы проверить содержимое vsyscall_gtod_data (все время сохраняя связанную информацию, которая необходима для работы clock_gettime()). Я использую GDB для пошагового выполнения кода сборки __vdso_clock_gettime(), и я смотрю на следующий раздел…
09 мар '17 в 16:54
1
ответ
Как python определяет PID, по-видимому, без обычных системных вызовов в Linux?
При запуске следующей команды strace -f python3 -c 'import os; print(os.getpid())' Я заметил, что Strace не ловит звонок на getpid(2) системный вызов. Сначала я подумал, что это происходит из-за того, что glibc кэширует pid, но не должно быть pid дл…
18 сен '18 в 04:24
1
ответ
vDSO: почему Linux использует их только для функций, связанных со временем?
Просто искал в ядре Linux хуки vdso (например, нашел это на kernel.org), и в настоящее время он используется в основном для системных вызовов, связанных со временем. Это напоминает два вопроса: Есть ли какие-либо другие системные вызовы, которые пла…
08 апр '14 в 00:19
1
ответ
Почему vdso появляется во время выполнения статических двоичных файлов?
Вот быстрый пример программы. (Это в основном получит procmap, связанный с процессом) > cat sample.c #include<stdio.h> int main() { char buffer[1000]; sprintf(buffer, "cat /proc/%d/maps\n", getpid()); int status = system(buffer); return 1; …
03 июл '15 в 13:32
1
ответ
Можно ли отключить vdso на стороне glibc?
Я знаю, что передача vdso=0 в ядро может отключить эту функцию, и что динамический компоновщик в glibc может автоматически обнаруживать и использовать функцию vdso из ядра. Здесь я встретился с этой проблемой. В моем учреждении есть окно RHEL 5.6 …
01 июл '13 в 14:03