如何确定常量字符串的长度?

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