检查x86程序集中的地址是否可写

时间:2015-04-11 10:53:21

标签: linux assembly x86

仅使用(32位)x86汇编,是否可以检查地址是否可写,没有与操作系统交互,并且没有发生段错误的风险?

程序将在第3环的Linux系统上运行。我不能使用“verw”指令。

举一个例子,我可能想检查地址0x0804a000是否可写。但如果我,例如执行“mov eax,0x0804a000; mov [eax],eax”然后,如果地址不可写,程序将会段错误。我知道的另一种方法是将sys_read调用到该地址并查看它是否失败,但这与操作系统交互。

在给定约束的情况下,有没有办法检查地址是否可写?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

如果您拥有内核权限,则可以在MMU中找到该信息。

但如果你不这样做,你根本就无法访问它,必须使用操作系统。

如果您的意思是不调用操作系统功能,那么至少在Windows上可以使用结构化异常处理。当然,它仍然是特定于操作系统的,因为您需要访问FS段的Windows TIB。