Перейти к содержимому

sysmodel

Members
  • Публикации

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

  • Посещение

  1. функция getenv()

    есть интересная особенность. Пишем не большую программу, в которой просто вызываем 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. __stack_chk_fail@plt

    А также было бы не плохо, если кто-нибудь скинул описание этой функции или где можно посмотреть ее исходный код.
  4. __stack_chk_fail@plt

    Хотя мне кажется, что эта проверка целостности стека должна быть вшита в компилятор и никакими атрибутами не может отключаться в целях безопасности.
  5. __stack_chk_fail@plt

    Забыл уточнить, что компилирую .c файлы, т.е. c код. Хотя, я думаю, что эта функция вставляется во все бинарники в независимости от языка. И кстати, я заметил, что эта функция вставляется, только если есть в коде есть массив из char значений (это то что я заметил. Возможно, условий гораздо больше).
  6. Привет! Может кто знает с какой версии gcc стал вставлять вызов call [address] <__stack_chk_fail@plt> в конец каждой функции в программе? И можно ли как-то билдить с помощью gcc без вызова <__stack_chk_fail@plt>?
×