c - 获取环境变量地址

标签 c gdb

我禁用了 ASLR。好吧,我想获取环境变量“SHELL”的地址,所以我使用了 C 函数 getenv()。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char* ptr = getenv("SHELL");
    printf("%p\n", ptr);
}

通过getenv()获取的地址

$ ./getenv
0xbffff752

用gdb得到的地址:

gdb> x/4000s $esp
...
(gdb) x/s 0xbffff710
0xbffff710:     "SHELL=/bin/bash"
(gdb) x/s 0xbffff716
0xbffff716:     "/bin/bash"

为什么地址不同?如前所述,我必须说出使用 GDB 获得的正确地址。

最佳答案

Why the addresses are different?

因为一个在 gdb 下运行而另一个不是。在不同的环境下运行会导致不同的环境。字面意思。

gdb 下运行时,printf() 语句的输出是什么?

As note, I must say the correct address in the obtained with gdb.

该声明基于什么信息?

关于c - 获取环境变量地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31772163/

相关文章:

c - 黄金分割搜索

C - 这两个结构声明有什么区别?

C:使用不同编译参数的总线错误

c++ - std::map std::find 问题

c++ - GDB 不显示函数名

c++ - gcc -g :what will happen

c++ - 编译我的代码以通过 xcode 在 OSX 中使用 mongodb c 驱动程序

c - 如何将值从结构复制到字符数组

c++ - $fp == $rbp 在 gdb 中吗?

c++ - 无法使用 gdb 输入。帮助!