Рассмотрите следующую короткую программу.Segfault на инструкции movq?
int main(){
asm("movq 0x5F5E100, %rcx;"
"startofloop: ; "
"sub 0x1, %rcx; "
"jne startofloop; ");
}
Эта программа отлично компилируется, но при запуске, он возвращает ошибку сегментации на начальном movq
инструкции.
Мне, должно быть, не хватает чего-то очевидного, но я надеюсь, что кто-то здесь может указать мне на это.
Я работаю на Debian 8 с ядром 3.16.0-4-amd64, если это необходимо.
Для справки в будущем, это то, что сгенерировал компилятор.
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
#APP
# 2 "asm_fail.c" 1
movq 0x5F5E100, %rcx;startofloop: ; sub 0x1, %rcx; jne startofloop;
# 0 "" 2
#NO_APP
Я ничего не знаю о сборке. Но, возможно, вы хотели скопировать значение 0x5F5E100 в% rcx и поменяли операнды, не осознавая этого? – andre
Пожалуйста, добавьте сгенерированный компилятором код сборки (скомпилируйте с '-S') на свой вопрос. – user3386109