当前位置:  开发笔记 > 运维 > 正文

为什么这个NASM代码打印我的环境变量?

如何解决《为什么这个NASM代码打印我的环境变量?》经验,为你挑选了1个好方法。

我刚刚完成了这个学期的计算机体系结构课程,除此之外,我们一直在涉足MIPS组装并在MARS模拟器中运行它.今天,出于好奇,我开始在我的Ubuntu盒子上搞乱NASM,基本上只是从教程中拼凑起来并了解NASM与MIPS的不同之处.以下是我目前正在查看的代码段:

global _start

_start:

    mov eax, 4
    mov ebx, 1
    pop ecx
    pop ecx
    pop ecx
    mov edx, 200
    int 0x80
    mov eax, 1
    mov ebx, 0
    int 0x80

这将保存为test.asm,并与其组合nasm -f elf test.asm并链接ld -o test test.o.当我调用它时./test anArgument,它按预期打印'anArgument',然后填充该字符串所需的许多字符总数为200个字符(因为该mov edx, 200语句).但有趣的是,这些填充字符,我本来应该是胡言乱语,实际上是从我的环境变量的开头,如env命令所示.为什么打印出我的环境变量?



1> 小智..:

在不知道实际答案或有时间查找的情况下,我猜测环境变量在命令行参数之后存储在内存中.您的代码只是缓冲区溢出到环境变量字符串并打印它们.

这实际上是有道理的,因为命令行参数由系统/加载器处理,环境变量也是如此,因此将它们存储在彼此附近是有意义的.要解决此问题,您需要找到命令行参数的长度,并且只打印那么多字符.或者,因为我假设它们是空终止字符串,所以打印直到达到零字节.

编辑:我假设命令行参数和环境变量都存储在初始化数据部分(我相信NASM中的.data)

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有