.string 在汇编中有什么作用?
在c 中的内联asm调用中,我写道
.string \"Hello World\"
Run Code Online (Sandbox Code Playgroud)
1) 有人能给我一个关于 .string 如何工作的概述吗?
2)该值以某种方式保存在 %esi 中。为什么?
3)如何在末尾附加回车?\n 不起作用
.string是 GAS 中的汇编指令,类似于.long, .int, 或.byte。它所做的只是创建并初始化内存供您在程序中使用。该指令将自动为您.string以空值终止字符串。[\0]在本例中,汇编器在 14 个连续字节的内存中为 14 个字符分配空间。如果您查看内存,您会看到以下内容:
["][H][e][l][l][o][ ][W][o][r][l][d]["][\0]
Run Code Online (Sandbox Code Playgroud)
除了十六进制而不是字符。我不确定如何或为何%esi指向该字符串(它要么是我不熟悉的汇编器设置,要么是在您未向我们展示的代码行上以这种方式设置的)。它的意思是%esi“指向”字符串的第一个字节 - 在本例中是第一个["]. 您可以使用%esi寄存器通过偏移量(%esi + 5将是[o])或通过递增寄存器本身来循环遍历字节。
要添加换行符,您可能需要尝试\x0D\x0A而不是\n.