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

问题描述 投票:0回答:1
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 $

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

这是他的解释:

如前面的实验所示,执行名的长度程序会影响导出的环境变量的位置。总体趋势似乎是地址的减少两个字节pro的长度每增加一个字节,环境变量克名称。程序名称a.out也是这样,因为不同之处在于-名称a.out和a之间的长度为4个字节,并且区别地址0xbfffff4e和0xbfffff46之间的字节为8个字节。这一定意味着执行程序的名称也位于堆栈中的某个位置,这导致了转移。

总趋势不是每次减少2位吗?他在其他所有地方都说字节,应该将其更改为位吗?

memory stack environment-variables hex
1个回答
0
投票

总趋势不是每次都减少2位吗?

没有一方面,字符(即字节),整数,指针等没有以字节或内存字内的任意位偏移量存储。

此实验中地址是否更改1、2、4或8个字节取决于体系结构(例如,x86,x86_64,arm,ppc等)和所使用的语言。另外,我无法从您的问题中得知地址是否对应于SLEDLESS CLI参数(即argv[1]),或者程序是否正在报告getenv("SLEDLESS")返回的地址(我假设这是一个C程序)。这也将影响地址的更改。

© www.soinside.com 2019 - 2024. All rights reserved.