Memory 装配分段故障
我不熟悉集会。我正在尝试这样做:Memory 装配分段故障,memory,assembly,segmentation-fault,nasm,Memory,Assembly,Segmentation Fault,Nasm,我不熟悉集会。我正在尝试这样做: SECTION .data SECTION .bss SECTION .text global _start _start: nop mov rax, 067FEh mov bx, ax mov cl, bh mov ch, bl nop 每次我运行这个,我都会遇到一个分段错误。我用gdb测试哪里出了问题。我发现每次在mov-rax,067FEh之后,它都表示程序收到了SIGSEGV。我试着用eax
SECTION .data
SECTION .bss
SECTION .text
global _start
_start:
nop
mov rax, 067FEh
mov bx, ax
mov cl, bh
mov ch, bl
nop
每次我运行这个,我都会遇到一个分段错误。我用gdb测试哪里出了问题。我发现每次在
mov-rax,067FEh
之后,它都表示程序收到了SIGSEGV。我试着用eax或ax替换rax。它仍然指出了错误。当我试图在rax中查找值时,它是067FE。我不知道那里发生了什么。有人能帮忙吗?谢谢 将立即数移到寄存器中不会导致segfault。很可能是处理器模式问题。首先,你用的是什么汇编程序?(nasm
,yasm
?)其次,这就是一切吗?CPU在执行nop
之后应该做什么?第三,您是否告诉您的汇编器输出64位ELF,以便CPU在尝试执行此操作时处于正确的模式?您是否直接执行输出二进制文件?我还希望在文件顶部有一个[BITS 64]
或类似的指令。您的汇编程序使用的是操作码SRC,DEST还是操作码DEST,SRC?我使用的是nasm。nasm-f elf64-g filename.asm。我在32位Linux中用eax而不是rax和nasm测试了您的代码。它工作时没有发出错误:nasm-g-f elf32 blub.asm
然后ld-m elf_i386-static-o blub blub.o
您能执行下一条指令吗?i、 e.,mov bx,ax