Memory 在基于十六进制的内存地址表示中,将最低有效位更改2是否意味着增加/减少2个字节或位?

Memory 在基于十六进制的内存地址表示中,将最低有效位更改2是否意味着增加/减少2个字节或位?,memory,stack,environment-variables,hex,Memory,Stack,Environment Variables,Hex,他基本上是制作不同文件名长度的不同文件,以了解它将如何影响环境变量SLEDLESS的内存 这是他的解释: 如前面的实验所示,execut名称的长度- ing程序对导出的环境变量的位置有影响。 总的趋势似乎是服务器地址减少了两个字节 pro长度每增加一个字节的环境变量- 克的名字。程序名a.out也是如此,因为- 名称a.out和a之间的长度差异为四个字节,差异为 地址0xbfffff4e和0xbfffff46之间有八个字节。这一定意味着 执行程序的名称也位于堆栈的某个位置, 导致换档的原因。 总

他基本上是制作不同文件名长度的不同文件,以了解它将如何影响环境变量SLEDLESS的内存

这是他的解释:

如前面的实验所示,execut名称的长度- ing程序对导出的环境变量的位置有影响。 总的趋势似乎是服务器地址减少了两个字节 pro长度每增加一个字节的环境变量- 克的名字。程序名a.out也是如此,因为- 名称a.out和a之间的长度差异为四个字节,差异为 地址0xbfffff4e和0xbfffff46之间有八个字节。这一定意味着 执行程序的名称也位于堆栈的某个位置, 导致换档的原因。

总的趋势不应该是每次减少2位吗?所以他说的所有其他地方,字节,都应该改成位

总的趋势不应该是每次减少2位吗

不可以。首先,字符(即字节)、整数、指针等不会以任意位偏移量存储在内存字节或字中


在这个实验中,地址是改变一个字节、两个字节、四个字节还是八个字节取决于体系结构(例如x86、x86_64、arm、ppc等)和所使用的语言。此外,我无法从您的问题中判断地址是否对应于
SLEDLESS
CLI参数(即
argv[1]
),或者程序是否报告了
getenv(“SLEDLESS”)
返回的地址(我假设这是一个C程序)。这也会影响地址的更改方式。

因此SLEDLESS是一个环境变量,是的,它使用getenv。我仍然有点困惑,为什么0xBFFF4E和0xBFFF4C之间的差异是2字节而不是2位?
reader@hacking:~/booksrc $ cp a.out a
reader@hacking:~/booksrc $ ./a SLEDLESS
SLEDLESS is at 0xbfffff4e
reader@hacking:~/booksrc $ cp a.out bb
reader@hacking:~/booksrc $ ./bb SLEDLESS
SLEDLESS is at 0xbfffff4c
reader@hacking:~/booksrc $ cp a.out ccc
reader@hacking:~/booksrc $ ./ccc SLEDLESS
SLEDLESS is at 0xbfffff4a
reader@hacking:~/booksrc $ ./a.out SLEDLESS
SLEDLESS is at 0xbfffff46
reader@hacking:~/booksrc $ gdb -q
(gdb) p 0xbfffff4e - 0xbfffff46
$1 = 8
(gdb) quit
reader@hacking:~/booksrc $