rw,修改代码,然后再改回rx进行执行。__text段的方法:使用mmap新建一块内存,把这块内存叫做new。https://github.com/comex/substitute/blob/95f2beda374625dd503bfb51a758b6f6ced57887/lib/darwin/execmem.c#L383-L384使用vm_copy把想要篡改的处于__text段内的内存(把这块内存叫target)拷贝到new里。https://github.com/comex/substitute/blob/95f2beda374625dd503bfb51a758b6f6ced57887/lib/darwin/execmem.c#L394使用mmap把target内存给unmap掉。这个参数,所以mmap会隐式地unmap掉目标内存。https://github.com/comex/substitute/blob/95f2beda374625dd503bfb51a758b6f6ced57887/lib/darwin/execmem.c#L411-L416调用mprotect把new改为rx。因为mmap出来的内存的max_protection是rwx,所以这里mprotect改权限没问题。https://github.com/comex/substitute/blob/95f2beda374625dd503bfb51a758b6f6ced57887/lib/darwin/execmem.c#L431-L432调用mach_vm_remap把new的内容反映回target里。https://github.com/comex/substitute/blob/95f2beda374625dd503bfb51a758b6f6ced57887/lib/darwin/execmem.c#L438-L441把newをunmap。思路决定出路,没有了思路,也就没有了出路。粤ICP备17054400号-3。