【问题标题】:How do I determine the length of a constant string?如何确定常量字符串的长度?
【发布时间】:2021-02-18 18:24:59
【问题描述】:

我在数据部分定义了一个字符串标签如下:

.data
    array:
        .string "Hello World!"

我的问题是,我将如何检索字符串 (11) 的长度?我是否必须使用 for 循环并遍历字符串标签占用的内存部分中的每一位,直到找到设置为 0 的字符(4 个字节的整数部分)?

【问题讨论】:

  • 是的,如果它不是一个常量字符串。否则,您当然可以让汇编程序为您计算长度。 PS:请注意,与 .string 中的所有其他字符一样,终止符是一个字节,而不是 4 个。
  • @Jester 字符串数组是常量,在程序执行过程中不会改变。因此,我将如何让汇编程序为我计算长度?

标签: assembly x86 gnu-assembler att


【解决方案1】:

获取字符串后面字节的地址,减去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 $6, %eax
    movl $8, %ebx

顺便说一句,如果您的字符串确实是常量,请考虑将其放在.section .rodata 而不是.data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 2021-04-20
    • 2012-09-14
    • 2011-05-06
    • 2012-07-06
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多