Lnx*_*gr3 1 linux assembly x86-64 segmentation-fault
为了我自己的病态,我正在编写一个用于Linux的x86_64程序集中的小程序.但是,在一个比较立即操作数和寄存器的指令中,我遇到了一个对我来说完全没有意义的段错误.是什么赋予了?
这是导致崩溃的代码:
_start:
sub $8, %rsp
mov %rsp, %rbx
lea le_string(%rip), %rsi
mov %rsi, %rdi
add $8, %rdi
mov $26, %cl
mov (%rsi), %al
cmp 'A', %al /* This line segfaults */
/* snip code that never runs */
le_string:
.ascii "YrFgevat"
Run Code Online (Sandbox Code Playgroud)
我正在组装gcc -nostdlib,它正在调用GNU汇编程序.
崩溃后倾倒寄存器显示:
%rsi 包含指向字符串的预期指针%al 包含字符串中预期的第一个字符%rip 指向不接触内存的指令请忽略缺少正常的调用约定 - 除了系统调用接口之外我没有调用任何东西,并且在它甚至到达那么远之前崩溃了!