当共享库映射到内存中时,Linux内核会为这个内存区域分配虚拟内存区域,并分别标记它们的权限。但是我们知道 x86 arch 中的页表项中没有可执行位。如果程序中有“call *edx”这样的调用指令来调用共享库中的函数,Linux内核如何知道目标地址是否可执行?如果 vma 列表中的权限不兼容,是否会导致一般保护错误?
问问题
3407 次
当共享库映射到内存中时,Linux内核会为这个内存区域分配虚拟内存区域,并分别标记它们的权限。但是我们知道 x86 arch 中的页表项中没有可执行位。如果程序中有“call *edx”这样的调用指令来调用共享库中的函数,Linux内核如何知道目标地址是否可执行?如果 vma 列表中的权限不兼容,是否会导致一般保护错误?