1
为了我自己的生病愉快,我正在为Linux编写一个x86_64程序集的小程序。然而,我在一个比较立即操作数和寄存器的指令中遇到了一个段错误,这对我来说绝对没有意义。是什么赋予了?Segfault正在运行cmp'A',%al‽
这里的领导到崩溃的代码:
_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"
我与gcc -nostdlib
,这是调用GNU汇编组装。
大跌后倾寄存器显示:
%rsi
包含预期的字符串指针%al
包含字符串在预期第一个字符%rip
指向不指令touch memory
请忽略缺少正常调用约定 - 我不是c除了系统调用接口以外的任何东西,这甚至在它得到那么多之前崩溃!
这是关于什么?提出问题并立即回答? – hirschhornsalz
我的意思是提出这个问题,但在提交之前(并且多次崩溃浏览器之后),我找到了答案。我继续提出问题并回答,以防其他人偶然遇到同样的问题。顺便提一下,Stack Overflow在“提问问题”页面上有一个复选框,可以让您提交问题的答案。 – LnxPrgr3
这是一个博客类型的问答,它是完全允许的,参考http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question以及http://stackoverflow.com/faq #questions“请环顾一下,看看你的问题是否曾经被问过,也可以问问并回答你自己的问题。” –