gpt4 book ai didi

linux - 运行 cmp 'A' 的段错误,%al‽

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:45 25 4
gpt4 key购买 nike

为了让我感到恶心,我正在为 Linux 用 x86_64 汇编语言编写一个小程序。但是,在将立即操作数与寄存器进行比较的指令中,我遇到了一个对我来说完全没有意义的段错误。给了什么?

这是导致崩溃的代码:

_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"

我正在使用调用 GNU 汇编程序的 gcc -nostdlib 进行汇编。

崩溃后转储寄存器:

  • %rsi 包含指向字符串的预期指针
  • %al 包含字符串中预期的第一个字符
  • %rip 指向一条不触及内存的指令

请忽略缺少正常的调用约定——除了系统调用接口(interface),我没有调用任何东西,而且它甚至在它到达那么远之前就崩溃了!

最佳答案

'A' 毕竟被解释为地址。如果你想把它当作常量使用,你需要这样写:

cmp $'A', %al

关于linux - 运行 cmp 'A' 的段错误,%al‽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10862040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com