Перехватить все обращения к диапазону адресов (Linux)

Задний планЯ пишу фреймворк, позволяющий совместное моделирование RTL, работающего в симуляторе, и неизмененном программном обеспечении хоста.Программное обеспечение хоста написано для управления реальным оборудованием и обычно работает одним из двух способов:Чтение /запись вызовов через драйверДоступ с отображением памяти с использованием mmapПервый случай довольно прост - напишите библиотеку, которая реализует те же вызовы чтения /записи, что и драйвер, и свяжите ее при запуске моделирования.Все это прекрасно работает, и я могу запускать немодифицированное производственное программное обеспечение в качестве стимула для моих RTL-симуляций.Второй случай оказывается намного сложнее первого ...Захват mmapСначала я думал, что могу использовать ---- +: = 0 =: + ---- для перехвата вызова mmap.В моей реализации ---- +: = 1 =: + ---- я бы выделил некоторую выровненную по страницам память, а затем ---- +: = 2 =: + ---- и установил сигналобработчик ловушки ---- +: = 3 =: + ---- .У этого подхода есть множество проблем:Чтение против записиЯ могу определить адрес доступа по ---- +: = 4 =: + ----, но не могу определить, был ли доступ на чтение или запись.Улавливание повторных обращенийВ обработчике сигналов мне нужно снять защиту с области памяти, иначе я получу повторение ---- +: = 5 =: + ---- s, как только мой обработчик завершит работу и код хоста больше не сможет продолжить.Однако, если я сниму защиту с региона, мой обработчик сигналов не перехватит последующие обращения.Гадость обработчика сигналовБлокировка в обработчике сигнала, в то время как симулятор управляет RTL и возвращает результат, нарушает все виды правил программирования - особенно учитывая, что симулятор может запускать все виды других событий и выполнять произвольный код перед возвратом результата из этого доступа.Другие подходыМне было интересно, можно ли создать файловый объект, который ведет себя как диск, вместо использования ---- +: = 6 =: + ---- в буфере.Я не нашел никакой информации, подтверждающей, что это возможно.ВопросыМожно ли перехватить все обращения к региону mmap и как?Доступ необходимо заблокировать на неопределенный период времени (пока работает симулятор)При доступе для чтения необходимо получить новое значение, помещенное моей ловушкойПредполагая, что ---- +: = 7 =: + ---- и ---- +: = 8 =: + ---- - лучший маршрут:Могу ли я определить, был ли доступ вызовом для чтения или записи?Как мне перехватить последующие обращения, если мне нужно удалить регион? - ---- +: = 9 =: + ---- ?Связанные вопросыКак написать обработчик сигнала для перехвата SIGSEGV?Возможность перехвата записи по адресу (x86 - linux)
7 голосов | спросил Chiggs 12 Jam1000000amSun, 12 Jan 2014 02:30:42 +040014 2014, 02:30:42

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132