我知道.string
指令不会在字符串的末尾添加空字符。 .asciz
指令用于此目的。但是,我不知道.string
指令是否在字符串的末尾放置一个空字符。如果是,那么.ascii
和.string
指令之间的区别是什么?对我而言,"
和$files = array('http://xyz.xyz/contributor/sub/file/' . $data['zipname'] );
似乎都是多余的。
答案 0 :(得分:3)
只是这个问题不再显示在“未答复” ...
.ascii
(供参考)
.ascii期望零个或多个字符串文字,以逗号分隔。它将每个字符串(不带自动尾随零字节)组合成连续的地址。
.asciz
.asciz与.ascii一样,但是每个字符串后跟一个零字节。 .asciz中的“ z”代表“零”。
.string
将str中的字符复制到目标文件。您可以指定要复制的多个字符串,以逗号分隔。除非为特定机器另外指定,否则汇编器会用0字节标记每个字符串的结尾。
...
变体string16,string32和string64与字符串伪操作码的不同之处在于,将str中的每个8位字符复制并分别扩展为16、32或64位。扩展的字符以目标字节顺序存储。
它们都支持转义序列并接受多个参数。至于您提到的两者之间的区别:
.string
不会添加空字节,而.asciz
总是会添加空字节。你可以这样做:
echo '.string""' | gcc -nostdlib -xassembler -; objdump -sj .text a
。.string
还具有后缀,可以将字符扩展到某些宽度(16、32或64)。如对问题的评论中所述,在大多数情况下,除了语义上没有其他区别,但从技术上讲,这两个伪操作是不同的。
附录:
事实证明,文档 do 提到了两种行为不同的架构:
.stringz
指令。.pstring
指令,用于包装字符并将未使用的空间零填充。
在gas/config
文件夹中浏览源代码,我们可以确认这一点并找到另外一个:
.string
和.stringz
的行为类似于HPPA。