微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

了解将字符串移动到堆栈的操作数大小不匹配

如何解决了解将字符串移动到堆栈的操作数大小不匹配

我在调试或理解gas中的以下错误时遇到困难:

movq $0x4461766964,-8(%rbp)  # "David" in hex
mov $SYS_STDOUT,%edi
lea -8(%rbp),%rsi
mov $5,%edx
mov $SYS_WRITE,%eax
syscall

但是我得到了以下错误

file.s:33:错误:“ movq”的操作数大小不匹配

我认为movq命令将把8个字节从-8(%rbp)移到-0(%rbp),因此生成的内存看起来像:

%rbp-8 -7 -6 -5 -4 -3 -2 -1
     D  a  v  i  d

在这里我似乎缺少什么或误解了?注意,movl似乎在这里起作用,它只是将数字截断为4个字节,movl $0x4461766964,-8(%rbp)

$ ./file
# file.s: Assembler messages:
# file.s:33: Warning: 293692926308 shortened to 1635150180
# diva

当然,这在逐字节添加时会起作用:

movb $0x44,-8(%rbp)
movb $0x61,-7(%rbp)
movb $0x76,-6(%rbp)
movb $0x69,-5(%rbp)
movb $0x64,-4(%rbp)

或者这个:

movl $0x44617669,-8(%rbp)
movl $0x64,-4(%rbp)

那为什么movq在这里的行为如此不同?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。