【发布时间】:2016-06-21 22:20:39
【问题描述】:
考虑以下短程序。
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 并在没有意识到的情况下交换操作数?
-
请将编译器生成的汇编代码(使用
-S编译)添加到您的问题中。