|
|
1
7
在不知道实际答案或没有时间查找的情况下,我猜测环境变量会在命令行参数之后存储在内存中。你的代码只是缓冲区溢出到环境变量字符串中并打印出来。 这实际上是有道理的,因为命令行参数和环境变量都是由系统/加载器处理的,所以它们存储在彼此附近是有意义的。要解决这个问题,您需要找到命令行参数的长度,并且只打印那么多字符。或者,由于我假设它们是以null结尾的字符串,请打印直到达到零字节。 编辑: 我假设命令行参数和环境变量都存储在初始化数据部分(我相信NASM中的.data) |
|
|
2
2
为了理解为什么要获取环境变量,您需要了解内核在进程启动时是如何安排内存的。 Here 是一个很好的图片解释(向下滚动到“堆栈布局”)。 |
|
|
3
1
只要你好奇,你可能想弄清楚如何打印字符串的地址(我认为它已经传入,你把它从堆栈中弹出)。此外,编写一个十六进制转储例程,以便您可以查看该内存和其他您感兴趣的地址。这可能会帮助您发现有关程序空间的信息。 好奇心可能是程序员工具箱中最重要的东西。 我还没有研究启动进程的细节,但我认为每次启动一个新的shell时,都会为它制作一个环境副本。你可能会看到由你运行的命令或你编写的脚本启动的shell的剩余部分,等等。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
|
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 1 年前 |
|
|
Marco · PyCharm Linux系统文件上os.stat异常 1 年前 |