Я хочу получить значение текущего счетчика программы (ПК) внутри обработчика mprotect. Оттуда я хочу увеличить значение ПК с помощью команды «n», чтобы программа пропустила некоторые инструкции. Я хочу сделать все это для Linux версии 3.0.1. Любая помощь в структурах данных, где я могу получить значение ПК и как обновить это значение? Образец кода будет оценен. Заранее спасибо.Как получить текущий счетчик программ внутри обработчика mprotect и обновить его
Моя идея - использовать некоторые задачи при записи адреса памяти. Поэтому моя идея - использовать mprotect для защиты адреса. Когда какой-то код пытается что-то написать по этому адресу памяти, я буду использовать обработчик mprotect для выполнения некоторой операции. После ухода за обработчиком я хочу сделать операцию записи успешной. Поэтому моя идея состояла в том, чтобы сделать адрес памяти незащищенным внутри обработчика, а затем снова выполнить операцию записи. Когда код возвращается из функции обработчика, ПК укажет на оригинальную инструкцию записи, тогда как я хочу, чтобы она указывала на следующую инструкцию. Поэтому я хочу увеличить ПК по одной инструкции, независимо от длины инструкции.
Проверьте следующий поток
MprotectHandler(){
unprotect the memory address on which protection fault arised
write it again
set PC to the next instruction of original write instruction
}
внутри основной функции:
main(){
mprotect a memory address
try to write the mprotected address // original write instruction
Other instruction // after mprotect handler execution, PC should point here
}
Что вы на самом деле пытаетесь достичь? Вы * изменяете * 'mprotect'? Для какой архитектуры это? Набор команд с фиксированной шириной или переменной шириной? Какие инструкции вы пытаетесь пропустить? 'mprotect' - системный вызов ... системный вызов будет возвращаться к процессу после его завершения. –
Я отредактировал мой вопрос. – azizulhakim