Betrachten Sie das folgende kurze Programm.Segfault auf movq Anweisung?
int main(){
asm("movq 0x5F5E100, %rcx;"
"startofloop: ; "
"sub 0x1, %rcx; "
"jne startofloop; ");
}
Dieses Programm stellt in Ordnung, aber wenn es ausgeführt wird, es Segfaults auf der anfänglichen movq
Anweisung.
Ich muss etwas offensichtlich fehlen, aber ich hoffe, dass jemand hier für mich darauf hinweisen kann.
Ich bin auf Debian 8, mit Kernel 3.16.0-4-AMD64, falls relevant.
Für zukünftige Referenz ist dies, was der Compiler generiert.
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
Ich weiß fast nichts über die Montage. Aber vielleicht wollten Sie den Wert 0x5F5E100 in% rcx kopieren und die Operanden vertauschen, ohne es zu merken? – andre
Fügen Sie bitte den Compiler-generierten Assembler-Code (kompilieren Sie mit '-S') zu Ihrer Frage hinzu. – user3386109