使用C代码访问环境变量

时间:2018-07-10 17:25:28

标签: c linux gdb

我创建了一个环境变量SHELLCODE,其中包含一个200字节长的NOP底座和一个shellcode。它存储在0x7fffffffe285285,但我将尝试访问0x7fffffffe2e5,它位于NOP底座的中间。

然后,我编写了以下代码来尝试访问该变量。

#include <stdlib.h>

int main() {
    char *pointer = 0x00007fffffffe2e5;
    printf("%s\n", *pointer);
}

我用gdb查看内存

(gdb) list 1
1   #include <stdio.h>
2   
3   int main() {
4       char *pointer = (char *) 0x00007fffffffe2e5;
5       printf("%s\n", *pointer);
6   }
(gdb) break 5
(gdb) run
(gdb) p pointer
$1 = 0x7fffffffe2e5 '\220' <repeats 119 times>, "\061\300\061\333\061ə\260\244̀j\vXQh//shh/bin\211\343Q\211\342S\211\341̀"
(gdb) p *pointer
$2 = -112 '\220'
(gdb) p/x *pointer
$3 = 0x90
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7a5bcc0 in _IO_vfprintf_internal (
    s=0x7ffff7dd2620 <_IO_2_1_stdout_>, format=<optimized out>, 
    ap=ap@entry=0x7fffffffdc58) at vfprintf.c:1632
1632    vfprintf.c: No such file or directory.

指针显然指向NOP底座的中间,并且gdb可以访问并查看该地址的内容。但是我一直收到这个细分错误错误。

这是因为不允许C程序访问存储环境变量的内存吗?如果是这样,是否有办法允许它访问内存?

我正在使用Ubuntu 16.04和gcc 5.4.0。 预先感谢。

1 个答案:

答案 0 :(得分:1)

getenv函数用于检索环境变量的值:

const char *shellcode = getenv("SHELLCODE");