Перейти к содержанию

sysmodel

Members
  • Постов

    6
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные sysmodel

  1. есть интересная особенность.

    Пишем не большую программу, в которой просто вызываем getenv() для какой нибудь переменной окружения и получаем постоянно разные адреса для одной и тоже переменной:

    sysmodel@ubuntu:~/C_files$ ./getenv PATH
    PATH is at 0xff811e61
    sysmodel@ubuntu:~/C_files$ ./getenv PATH
    PATH is at 0xffc88e61
    sysmodel@ubuntu:~/C_files$ ./getenv PATH
    PATH is at 0xff8e5e61

    Закономерности я в этом пока не нашел, но судя по всему это проделки ОС.

    Но вот с другой стороны, когда выполняется программа в gdb, то тут всегда один и тоже адрес:

    (gdb) c
    Continuing.
    PATH is at 0xffffde6d
    [Inferior 1 (process 8052) exited normally]
    (gdb) run PATH
    Starting program: /home/sysmodel/C_files/getenv PATH

    Breakpoint 1, 0x0804847a in main ()
    (gdb) c
    Continuing.
    PATH is at 0xffffde6d
    [Inferior 1 (process 8056) exited normally]
    (gdb) run PATH
    Starting program: /home/sysmodel/C_files/getenv PATH

    Breakpoint 1, 0x0804847a in main ()
    (gdb) c
    Continuing.
    PATH is at 0xffffde6d
    [Inferior 1 (process 8057) exited normally]

    Кто нибудь может объяснить эту особенность? Хотя возможно в gdb просто подгружает в выполняемою программу собственный env, например, с помощью execle...

  2. Добрый день!

    Я новичке в С и мне интересны некоторые особенности стандартных функций в частности getenv(). Кто нибудь может подсказать, как работает эта функция и как она получает адрес переменной из окружения?

    И вообще можно ли где-то посмотреть исходники стандартных функций?

  3. Забыл уточнить, что компилирую .c файлы, т.е. c код. Хотя, я думаю, что эта функция вставляется во все бинарники в независимости от языка. И кстати, я заметил, что эта функция вставляется, только если есть в коде есть массив из char значений (это то что я заметил. Возможно, условий гораздо больше). 

×
×
  • Создать...