gpt4 book ai didi

c - 字符串在 IA32 程序集中如何表示?

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:30 24 4
gpt4 key购买 nike

一个字符串被表示为一个字符数组。例如,如果我在地址 0x80000000 处有一个字符串“abcdef”,以下是否正确?

0x80000008
0x80000004: 00 00 46 45
0x80000000: 44 43 42 41

(在堆栈中,它向下增长,所以我的地址在减少)

最佳答案

  1. 低位地址总是在前 - 即使在堆栈中也是如此。所以你的例子应该是:

    80000000: 41 42 43 44 
    80000004: 45 46 00 00
  2. 您的示例实际上是字符串:“ABCDEF”。字符串“abcdef”应该是:

    80000000: 61 62 63 64
    80000004: 65 66 00 00

此外,在内存转储中,默认基数为 16(十六进制),因此“0x”是多余的。请注意,字符代码也是十六进制的。例如字符串“JKLMNOP”将是:

   80000000: 4A 4B 4C 4D
80000000: 4E 4F 50 00
  1. 栈中通常没有字符串。仅在数据存储器中。栈中有时会放置指向字符串的指针,即字符串的起始地址。

  2. 您(和我)的示例涉及所谓的 ASCII编码。但是有很多可能character encoding计划可能。例如EBCDIC也使用 8 位代码,但不同于 ASCII。

但 8 位代码不是强制性的。例如 UTF-32 使用 32 位代码。此外,固定代码大小不是强制性的。 UTF-8 使用 1 到 6 个字节的可变代码大小,具体取决于编码的字符。

关于c - 字符串在 IA32 程序集中如何表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33116755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com