【发布时间】:2013-11-14 00:30:10
【问题描述】:
我想在 mprotect 处理程序中获取当前程序计数器 (PC) 值。从那里我想将 PC 的值增加“n”条指令,以便程序跳过一些指令。我想为 linux 内核版本 3.0.1 做所有这些。关于我可以获得 PC 值的数据结构以及如何更新该值的任何帮助?示例代码将不胜感激。提前致谢。
我的想法是在写入内存地址时使用一些任务。所以我的想法是使用 mprotect 使地址写保护。当一些代码试图在那个内存地址上写一些东西时,我将使用 mprotect 处理程序来执行一些操作。处理好处理程序后,我想让写操作成功。所以我的想法是使内存地址在处理程序内部不受保护,然后再次执行写操作。当代码从处理函数返回时,PC 将指向原始写指令,而我希望它指向下一条指令。因此,无论指令长度如何,我都想将 PC 增加一条指令。
检查以下流程
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是系统调用……系统调用完成后会返回进程。 -
我已经编辑了我的问题。
标签: linux kernel mprotect program-counter