【发布时间】:2016-07-12 19:39:48
【问题描述】:
我试图修改名为 g 的函数的第一条指令,但在下面的 sn-p 中的第二条语句出现段错误
int a = *(int*)g;
*(int*)g=0; // segment fault!
*(int*)g=a;
此段错误是否是由于我要修改的指令所在页面的页表条目中的 no-write 权限?
我这样做是因为我想看看我是否可以修补一个带有一些错误的函数,同时保持进程运行,如下所示:
1) g 函数的进程正在运行,并且发现该g 存在一些错误。因此,编写一个名为 patch_g 的新函数,它没有任何错误。
2) 将新函数编译成patch.so
3) dlopen & dlsym .so 文件。获取patch_g的地址。
4) 暂停正在运行的进程
5) 使用一些代码(有点类似于上面sn-p的第二条语句)将g的第一条指令改成jump patch_g。
【问题讨论】:
标签: linux permissions arm