【发布时间】:2016-11-04 06:36:43
【问题描述】:
为什么下面的代码没有给出分段错误?
global _start
section .data
_start:
mov ecx, 3
xor byte[_start+1], 0x02
mov eax, 1
mov ebx, 2
int 80h
我希望它与在 .text 部分中运行相同的代码时在同一位置(标有注释的行)发生段错误:
global _start
section .text ; changed from data to text
_start:
mov ecx, 3
xor byte[_start+1], 0x02 ; ******get segmentation fault here
mov eax, 1
mov ebx, 2
int 80h
现在,我知道.data 部分用于读写,而.text 部分用于只读。
但是,当我尝试访问非法内存地址时,这有什么关系呢?
对于此处的示例,我预计在.data 部分也会出现分段错误,与我在.text 部分中得到的位置相同。
【问题讨论】:
-
嗯,
xor指令正在修改_start+1处的字节。在text部分中,该字节是只读的,而在data部分中,它是可写的。看来你已经知道了足够的信息来回答你自己的问题,所以我有点困惑。
标签: linux assembly x86 segmentation-fault