页面 table 条目变脏的方式
the ways by which page table entry can become dirty
访问和脏 (A/D) 位告知页面是被访问还是被写入。当文件加载到内存中时,一些更改仅在内存中,但仍未与存储在磁盘上的文件同步。被修改但没有写回的页面是脏页。
我的问题是这个概念是否也适用于 ELF 文件?
.code, .data 也会变脏吗?如果是那么怎么办?
My question is whether this concept also implies on ELF files?
是的。
Can .code, .data also get dirty? if yes then how?
.code
通常没有写权限(只能读和执行),所以通常没有别弄脏了。
但是,您可以 mprotect
一个可写的.code
页面,并写入它(这通常用于运行时修补)。如果你这样做,相应的页面将变脏,并且 将保持 脏,因为它是用 MAP_PRIVATE
映射的(你通常不希望 运行 程序在磁盘上更改其图像)。
如果您的二进制文件有文本重定位,您也可能会弄脏 .code
页(当非 fPIC
代码链接到 ix86
上的共享库时经常发生)。
最后,.data
页面一直被修改(每次修改初始化的全局变量),然后这些页面在程序(同样,您通常不希望 运行 程序修改其磁盘映像)。
更新:
text/.code relocations with out fpic are those which are made for shared libraries at load time. then it means these relocations make .code dirty before even execution of entry instruction.
不一定。要考虑的两种情况:
a.out
直接依赖于 foo.so
a.out
使用 dlopen
加载 foo.so
在情况 1 中,您是正确的:foo.so
中的文本重定位将导致其 .text
页面的(部分)在执行 a.out
的第一条指令之前变脏(请注意,user-space 从 ld.so
条目开始执行,而不是从 a.out
条目开始执行。
在情况 2 中,.text
页面将作为 dlopen
的一部分变脏,它在 main
之后很久(它本身在入口指令之后很长时间)。
when .data pages are modified, in response should .code pages also become dirty for fpic or non fpic?
否:修改 .data
不会导致 .code
也变脏。为什么会这样?
访问和脏 (A/D) 位告知页面是被访问还是被写入。当文件加载到内存中时,一些更改仅在内存中,但仍未与存储在磁盘上的文件同步。被修改但没有写回的页面是脏页。
我的问题是这个概念是否也适用于 ELF 文件? .code, .data 也会变脏吗?如果是那么怎么办?
My question is whether this concept also implies on ELF files?
是的。
Can .code, .data also get dirty? if yes then how?
.code
通常没有写权限(只能读和执行),所以通常没有别弄脏了。
但是,您可以 mprotect
一个可写的.code
页面,并写入它(这通常用于运行时修补)。如果你这样做,相应的页面将变脏,并且 将保持 脏,因为它是用 MAP_PRIVATE
映射的(你通常不希望 运行 程序在磁盘上更改其图像)。
如果您的二进制文件有文本重定位,您也可能会弄脏 .code
页(当非 fPIC
代码链接到 ix86
上的共享库时经常发生)。
最后,.data
页面一直被修改(每次修改初始化的全局变量),然后这些页面在程序(同样,您通常不希望 运行 程序修改其磁盘映像)。
更新:
text/.code relocations with out fpic are those which are made for shared libraries at load time. then it means these relocations make .code dirty before even execution of entry instruction.
不一定。要考虑的两种情况:
a.out
直接依赖于foo.so
a.out
使用dlopen
加载foo.so
在情况 1 中,您是正确的:foo.so
中的文本重定位将导致其 .text
页面的(部分)在执行 a.out
的第一条指令之前变脏(请注意,user-space 从 ld.so
条目开始执行,而不是从 a.out
条目开始执行。
在情况 2 中,.text
页面将作为 dlopen
的一部分变脏,它在 main
之后很久(它本身在入口指令之后很长时间)。
when .data pages are modified, in response should .code pages also become dirty for fpic or non fpic?
否:修改 .data
不会导致 .code
也变脏。为什么会这样?