【发布时间】:2011-04-13 09:04:43
【问题描述】:
我正在尝试利用缓冲区溢出进行赋值,我必须访问环境变量(读取其中一个),但我不知道在哪里寻找它们。我正在使用 gdb 来检查内存,但是我找不到环境变量。
【问题讨论】:
标签: assembly gdb environment-variables
我正在尝试利用缓冲区溢出进行赋值,我必须访问环境变量(读取其中一个),但我不知道在哪里寻找它们。我正在使用 gdb 来检查内存,但是我找不到环境变量。
【问题讨论】:
标签: assembly gdb environment-variables
有一个全局变量 (char **environ) 应该存在于正在运行的可执行文件的符号表中,如果它是使用 -g 选项编译的。
【讨论】:
我希望你已经找到了。 环境变量存储在 esp 寄存器中,例如在我当前的练习中,我可以使用此命令显示环境变量(starti 用于在第一条指令处中断):
(gdb) starti
(gdb) x/50s $esp+450
【讨论】:
pop ecx (load argc) / lea edx, [esp + ecx*4 + 4] 获取指向 env 数组第一个条目的指针。 (越过终止 argv[] 的 NULL 指针)。这当然是假设 i386 System V ABI,例如对于 Linux。其他操作系统在进程启动时可能在不同的地方有东西。 (但仍可能通过 main 第三个参数,char *envp[])