我正在使用C中的一个类调用程序集中的类.C类发送2个整数作为参数,但这不相关,因为我遇到了一个我似乎不太明白的分段错误错误这是为什么。
这是程序集类的相关部分:
.global testingclass testingclass:
pushl %ebp
movl %esp, %ebp
subl $4, %esp #reserves space for local variable
movl 8(%ebp), %ebx #first argument of the function to %ebx
movl 12(%ebp), %ecx #second argument of the function to %ecx
function:
movl $0, %eax ----------------< segmentation fault
movl 0x0000FFFF, %eax
and %bx, %ax
movw %ax, -4(%ebp)
...
我签署了在调试时给出分段错误错误的行。我真的不知道一个简单的移动命令如何触发分段错误,但希望你能帮助我。
这是调试器控制台输出:
...
11 movl 12(%ebp), %ecx #second argument of the function to %ecx
(gdb) n
function() at asm.s:16
16 movl 0x0000FFFF, %eax
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
function() at asm.s:16
16 movl 0x0000FFFF, %eax
答案 0 :(得分:1)
此指令发生了seg错误:
movl 0x0000FFFF, %eax
不在此指示:
movl $0, %eax
seg故障的原因是从地址(64k-1)读取
程序只能读/写用户空间可用的地址。
由于OS是第一个,在中断向量之后,代码试图读取OS代码中的地址。操作系统代码不属于用户空间。