首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在基于十六进制的内存地址表示中,将最小有效位改为2是否意味着增加/减少2个字节或位?

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

Stack Overflow用户
提问于 2019-10-27 07:33:59
回答 1查看 30关注 0票数 0
代码语言:javascript
运行
复制
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的内存。

这是他的解释:

正如前面的实验所显示的,执行程序名称的长度对导出的环境变量的位置有影响。总的趋势似乎是环境变量的地址减少了两个字节,而程序名的长度每增加一个字节就会减少两个字节。对于程序名a.out,这是正确的,因为名称a.out和a之间的长度差异是4个字节,而地址0xbfffff4e和0xbffff 46之间的差异是8个字节。这一定意味着正在执行的程序的名称也位于堆栈的某个地方,这导致了迁移。

总的趋势不是每次减少2位吗?所以所有其他地方他说字节,他们应该被改变为比特?

EN

回答 1

Stack Overflow用户

发布于 2019-10-27 21:55:06

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

不是的。首先,字符(即字节)、整数、指针等不存储在字节或内存字内的任意位偏移处。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58577399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档