【问题标题】:Finding the environment variables in assembler在汇编程序中查找环境变量
【发布时间】:2011-04-13 09:04:43
【问题描述】:

我正在尝试利用缓冲区溢出进行赋值,我必须访问环境变量(读取其中一个),但我不知道在哪里寻找它们。我正在使用 gdb 来检查内存,但是我找不到环境变量。

【问题讨论】:

    标签: assembly gdb environment-variables


    【解决方案1】:

    有一个全局变量 (char **environ) 应该存在于正在运行的可执行文件的符号表中,如果它是使用 -g 选项编译的。

    【讨论】:

      【解决方案2】:

      我希望你已经找到了。 环境变量存储在 esp 寄存器中,例如在我当前的练习中,我可以使用此命令显示环境变量(starti 用于在第一条指令处中断):

      (gdb) starti
      (gdb) x/50s $esp+450
      

      【讨论】:

      • 堆栈中 env vars 的开始位于命令行参数的正上方。所以在进程启动时,pop ecx (load argc) / lea edx, [esp + ecx*4 + 4] 获取指向 env 数组第一个条目的指针。 (越过终止 argv[] 的 NULL 指针)。这当然是假设 i386 System V ABI,例如对于 Linux。其他操作系统在进程启动时可能在不同的地方有东西。 (但仍可能通过 main 第三个参数,char *envp[]
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2016-09-05
      • 2017-06-23
      相关资源
      最近更新 更多