这看起来可能是个奇怪的问题,但是x64对待声明为.byte段的数组和对待.asciz数组一样吗?上下文是我使用read系统调用阅读字符串(只是看看我是否可以)。我将其存储在. bytes类型的缓冲区数组中。但是,如果我尝试通过printf将此数组打印到标准输出,它不会打印任何内容。因此,我的问题是,本质上,在这种情况下我需要做一些不同的事情吗?
i7uaboj41#
是,但有一个例外:.byte数组不会像.asciz那样在末尾放置空终止符。
.byte
.asciz
.asciz "Hello"
等同于:
.byte 0x48,0x65,0x6C,0x6C,0x6F,0x00
然而,这甚至比这更进一步。例如,.word 0x1234被视为与.byte 0x34,0x12相同(假设x86是一个little-endian体系结构)。为了清晰起见,最好使用其预期类型声明数据,但不像在C中那样需要这样做。(一些汇编程序有这样的问题,但在运行时,所有的赌注都是错误的。)
.word 0x1234
.byte 0x34,0x12
1条答案
按热度按时间i7uaboj41#
是,但有一个例外:
.byte
数组不会像.asciz
那样在末尾放置空终止符。等同于:
然而,这甚至比这更进一步。例如,
.word 0x1234
被视为与.byte 0x34,0x12
相同(假设x86是一个little-endian体系结构)。为了清晰起见,最好使用其预期类型声明数据,但不像在C中那样需要这样做。(一些汇编程序有这样的问题,但在运行时,所有的赌注都是错误的。)