如何确定常量字符串的长度?
How do I determine the length of a constant string?
我在数据部分定义了一个字符串标签如下:
.data
array:
.string "Hello World!"
我的问题是,我将如何检索字符串 (11) 的长度?我是否必须使用for循环并遍历字符串标签占用的内存部分中的每一位,直到找到设置为0的字符(4字节的整数部分)?
获取字符串后面字节的地址,减去array
的地址。
这可以通过在字符串的末尾放置另一个标签,或使用指向当前地址的 .
来完成。示例:
.data
str1:
.string "Hello"
str1_end:
str1_len = (str1_end - str1)
str2:
.string "Goodbye"
str2_len = (. - str2)
.text
.global foo
foo:
movl $str1_len, %eax
movl $str2_len, %ebx
这样组装成
movl , %eax
movl , %ebx
顺便说一句,如果您的字符串确实是常量,请考虑将其放在 .section .rodata
而不是 .data
。
我在数据部分定义了一个字符串标签如下:
.data
array:
.string "Hello World!"
我的问题是,我将如何检索字符串 (11) 的长度?我是否必须使用for循环并遍历字符串标签占用的内存部分中的每一位,直到找到设置为0的字符(4字节的整数部分)?
获取字符串后面字节的地址,减去array
的地址。
这可以通过在字符串的末尾放置另一个标签,或使用指向当前地址的 .
来完成。示例:
.data
str1:
.string "Hello"
str1_end:
str1_len = (str1_end - str1)
str2:
.string "Goodbye"
str2_len = (. - str2)
.text
.global foo
foo:
movl $str1_len, %eax
movl $str2_len, %ebx
这样组装成
movl , %eax
movl , %ebx
顺便说一句,如果您的字符串确实是常量,请考虑将其放在 .section .rodata
而不是 .data
。