Copyright © 2000, 2001, 2002, 2003 The FreeBSD Documentation
Project
����� ���������� � ����������� FreeBSD ��� �������������. ���� �������� ��������� � �������� ��������� �
������������ ����� ��������� ������ ��������� �����. ������ ������ ��� �� ��������, �
��������� �� ���������� ������� ����������. ���� �� ������ ������ ����� �������, ��������
� ������
�������� ������� ������������ FreeBSD.
��������� ������ ����� ��������� ��������� �������� � ���������� ��� ����� FreeBSD. ���� �������� ����� ����� ���� ������ �
��������� �������� � FTP
������� FreeBSD ��� ������ �� ��������� ������.
��������������� � ������������� �������� (SGML DocBook) � ‘����������������’ ����
(SGML, HTML, PDF, PostScript, RTF � ������) � ������������ ��� ��� ����, ��������� ���
���������� ��������� ����������:
-
���������������� ����� ��������� ���� (SGML DocBook) ������ ��������� ��������������
���������� copyright, ���� ������ ��������� � ��������� ��������� ����� �� ����� � ������
������� ����� ����� ������������������. -
���������������� ����� ���������������� ���� (�������������� � ������ DTD,
���������������� � PDF, PostScript, RTF � ������ �������) ������ ��������� ��������������
���������� copyright, ���� ������ ��������� � � ��������� ����� � ������������ �/���
������ ����������, ������������ � �������������.
Important: ��� ������������ ������������ �������� ������������ FREEBSD «���
����» � ����� ����� ��� ������� ��������, �������, �� �� ������������� ��������
����������, ������������ �������� � ����������� ��� ���������� ���� ����������. �� � ����
������ ������� ��� ��������� �� ������ ���� �������������� �� ����� ������, ���������,
���������, �����������, ���������� ��� ����������� ������ (�������, �� �� �������������
��������� ������� ������ ��� �����; ������ ������ ��� �� ������������ �������� ���
������; ��������������� �������), � ��� �� ����� ��������� � � ����� ������
���������������, ���������� �� �����������, ������� ���������������, ��� ��������������
(������� ���������� ��� ���� ��������), ��������� ����� ����� ��� ������������� �����
������������ �����������, ���� ���� �� ���� �������� � ����������� ������ ������.
- List of Examples
- 2-1. ��������� ���� .emacs
I. ������
Chapter 1 ��������
��� ����� �������Murray Stokely and
Jeroen Ruigrok van der Werven.
1.1 ���������� �� FreeBSD
����, � ��� ��� ����. ������� ��������� ����������� � �� ������ ������
���������������. �� � ���� ������? ��� ������������� FreeBSD? ��� ��� ����� ���� ��� ���
������������?
��� �� �� ��������� ��������, �� ������� �������� ���� ����� ��� �����. �������,
����������������, ��� � ����� ������ ������� ������������, ����� ������ ������
����������������� ����������. ��� ��������� ��� �����, ��� ������ ��� ���������.
���������� � ���� ����� ����� � ������� ������� ����������� ����������� ������������, ��
����� ����� ��������� �������� ������������, ��������� ������ ���� �� ���������
FreeBSD.
1.2 ������ BSD
������� ����� ������ UNIX-�������� ������������ �������, ��������� ������������
��������� ����������� �������, � ����� ����������, ������������������ � ����������.
1.3 ������������� ���������
���� ��������� ����� ���� ������� � ��������� �������� ����������
-
�� ��������� ����� ����������������, ����� �������, ����� ������ ��������� ����������
������ ��� ���. -
������, ���� � ������� �� �����, ��� �� �����, ��� � ����������� ����, ���� � �������
�� �����. �� ��������� �������� � ������� ���; ����� ������� ������� ����������� ���, ���
�������������� ����������� ����� ���� ����������� � ������ �������������. -
������������, ��� ����� ���� ����� ��������� �� ������ ������ �������, ��� ���������
������ ��� ��������. -
���� �������� �� ����� �� ������, ��������, ����� ����� �� ������ �� �������.
-
���� �� ������ ������� 90 ��������� ���������� ����� 10 ��������� ������, �������
����� ������� �������. -
���������� �������� ������� ����.
-
����� ��������, � �� �������. � ���������, �������� ���������� �� �����������������
���������� �������.
�� Scheifler & Gettys: «X Window System»
1.4 ��������� �������� /usr/src
������ �������� ��� FreeBSD ������������� � ����� ������������� ��������� CVS.
�������� ��� ������ ��������������� � /usr/src, �������
�������� ��������� �����������.
������� | �������� |
---|---|
bin/ | �������� ��� ������ �� /bin |
contrib/ | �������� ��� ������ ������������ ����������� ��������� �������������. |
crypto/ | �������� ��� DES |
etc/ | �������� ��� ������ �� �������� /etc |
games/ | �������� ��� ������ �� /usr/games |
gnu/ | �������, ����������� ��� �������� GNU Public License |
include/ | �������� ��� ������ �� /usr/include |
kerberosIV/ | �������� ��� Kerbereros version IV |
kerberos5/ | �������� ��� Kerbereros version 5 |
lib/ | �������� ��� ������ �� /usr/lib |
libexec/ | �������� ��� ������ �� /usr/libexec |
release/ | �����, ������� ��������� ��� �������� ������ FreeBSD |
sbin/ | �������� ��� ������ �� /sbin |
secure/ | �������� ��� FreeSec |
share/ | �������� ��� ������ �� /usr/share |
sys/ | �������� ��� ���� |
tools/ | �������, ������������ ��� ��������� � ������������ FreeBSD |
usr.bin/ | �������� ��� ������ �� /usr/bin |
usr.sbin/ | �������� ��� ������ �� /usr/sbin |
Chapter 2 ����������� ����������������
��� ����� ������� James Raynard .
����������� ��� ��������� � ����������� ������������ �������� Murray Stokely <murray@FreeBSD.org>
.
2.1 �����
���� �������� �������� ������� �� ������������� ��������� ������������ ���
���������������� �� FreeBSD, ���� ������ ������ ����� ��������� � ��� ������ ������ Unix.
����� �� �������� ������� �������
������� ����������� �� ��� �������. ������� ����� ��������� �� ������������ ���
������������ �������������� ���������� � �����������������, ���� ��������, ��� ��
���������� ����������� �������������.
2.2 ��������
FreeBSD ������������ ���������� ����� ��� ������� ����������. � ������� ��������
������������ ����������� C, C++, ����� Fortran � ����������, �� ������ �� ��
�������������� Perl � ������ ������������ ������ Unix, �����, ��� sed � awk. ���� ����� ������������, �� �
��������� ������ ������� ��� ������ ������������ � ���������������. FreeBSD �����������
��������� ������������� ����� ����������, ��� POSIX �
ANSI C, � ����� ����������� ��������� BSD, ��� ���
�������� ������ ����������, ������� ��� ������ ��� � ��������������� ������������� �����
��������������� � �������� �� ������� ������� ��������.
������, ��� ��� ���� ����� �������� ���������, ���� ����� �� ������� �� ������
��������� �� ��������� Unix. ���� �������� ������� ��� ������� ������ ���� ��� ����������
� ������� �������. ��� �������������� — ���� ��� ���������� ���������� �� �������, �����
�� ����� ��������������� � ������������.
� �������� ���� �������� �� ������� ��� ������� �������������� ������
����������������, ���� �������������� ������� ������ ������������� �� ������������� Unix
� ������� �������!
2.3 �������� � ����������������
��������� ������������ ����� ����� ����������, ������� ������������ ����������
��������� ��������� ��������; ������ ��������, ������� ����� ���������, ������� �� ����,
��� ��������� � ���������� ���������� ���������� ��������. ���� ������ ���� ��� �����
���� �������� ��������, �������� �� ������ �������� ����������, ��� «�������», ��� ��
������ ��������. � ����� ������� ������������ �������������, � �
������ ����������. ��� ��� ������������ ����� ������� ������ ���
���������������� ��������� �����������, ������� ������ ������������ �� ����� ��
���������� ������������� ����� ����������������.
2.3.1 ��������������
� ������ ������������� �������������� ���� ������������ ����� ��������, � ������� ��
��������� �������, � �������� �� ���������. ��� ����� ������� �������� �� ������ �������
������� � ����� � ��������� ������������� ��������� ���� � ��������� ������� �� ����.
���� ���-�� ���������� �� ���, ������������� �������� ���������� ���������, � �������
�������� �� ������� ��������� ��������.
������ ����� ������� �������� ����������� ������ ���������� ���������� ����� ������
����������, � ������ ����� ���� ������ ����������. ����� ������� ����� �����������, �����
�� ����������� ���������� � ���-������ ������ �����������. ��� ������ ����� ����� �����
�� ������������� ��� �� ������ �����-�� ������� �������� ���, � ��� ����� ������, ��� ���
������������. ����� ����, ������������� ����� �� ����������� ����������� ��������� �
��������� � ������ ������� �� ��� �������! � ����� ������ ������������������,
�������������� ����� ������������ ����� ������, �, ��� �������, ������������ ��� ��� ��
��� ����������, ��� ���, ������������ �������������.
�� ����� ������, ������������� ����������������� ������ �������� ������� �������, ����
����� �� �� ���������� �����������������. ����� ������ ������ ������ ������������ �
������� ���� Lisp, Smalltalk, Perl � Basic. ����� ����� ��������, ��� �������� Unix (sh, csh) �������� ���������������, � ������
���� ����� «�������» ��� �������� ��� ���������� ���������� ��������� «������������»
����� �� ����� �������. �� ����� ����, ������ ��������� Unix ���� ��������������
��������� ��������� ��������������� ��������, ������� ����� ������� ������ � ��������
�������� ��� ���������� �������� ��������.
2.3.2 ��������������, ��������� ���
FreeBSD
���� ���������� ������ ���������������, ������� �������� � ���� �������� FreeBSD, �
������� ����������� ��������� ����� ���������� ����������������� ������.
��� ��������� ������ �� ���� �������� ��� ���������� �������� �� ������, � �����
��������� �������
# pkg_add ��� �������
������������� root. ��� ������ �������, ��� �������, ��������� �������������������
������� FreeBSD ������ 2.1.0 � ����!
- BASIC
-
��� ���������� �� Beginner’s All-purpose Symbolic Instruction Code. ���������� �
1950-� ����� ��� �������� ��������� ������������ ���������������� � � 1980-� �����������
� ������ ��������� ���� ������������ �����������; BASIC ��� ������ ������ ���������������� ��� ������
�������������. �� ����� � ������ Visual Basic.�� FreeBSD ������� Bywater Basic Interpreter � Phil
Cockroft’s Basic Interpreter (����� Rabbit Basic) � ���� ��������
FreeBSD. - Lisp
-
����, ������� ��� ���������� � ����� 1950-� � �������� ������������ «��������������»
������, ���������� � �� �����. ������ ����, ����� ��������� �� ����������, List ���������
�� ������; �� ����� ���� �������� �������� ����������� �� «List Processing». �����
��������� � ������� AI (�������������� ����������).Lisp �������� ����� ������ � ������������� ������, �� �� ����� ��������� ����������
������� � ����������.�� FreeBSD ������� GNU Common Lisp � ���� �������.
- Perl
-
����� ����� ������������ ���������� ���������������� ��� ��������� ��������; �����
����� ������������ �� �������� World Wide Web ��� ��������� CGI-��������.����� ��������� ������ (������ 5) ������������ � FreeBSD.
- Scheme
-
������� ����� Lisp, ����� ���������� � ��������, ��� Common Lisp. ��������� �
�������������, ��� ��� ���������� ����� ��� �������� ���������� � �������� ������� �����
� ����� ���������� ������� ������� ��� ������������� � ����������������� ������.�� FreeBSD ������� ������� ��� Elk
Scheme Interpreter, MIT Scheme Interpreter � SCM
Scheme Interpreter. - Icon
-
The Icon Programming Language.
- Logo
-
Brian Harvey’s LOGO Interpreter.
- Python
-
Python Object-Oriented Programming Language
2.3.3 �����������
����������� ���������� ������ ���������� �� ���������������. ������� �� �����������
���� ��� � ���� (��� �����), ��������� ��������. ����� �� ���������� ���������� �
��������, ������������ �� �� ���� ���������. ���� ��� �� �������������, �� ����������
������ � ������������� � ��������������; ���� ��� ������������� � ��������� ��������, ��
������ ��������� �� � ����������� �������� ��� � ��������� ��� �������� ������������
�����������������. [1]
������ ���� ������� �� ��� ���������������, ��� ��� ������������� ��������������.
������ �� ��������� ��� ��������� ��������� ��������, ������� �������������� ���
���������� ������� � ��������������, � �������, �������� ���, ����� ����������������� �
������������ ��������—��� ���� �������� ����������� ������������ �������! ��� �����
�������, ���� ��� ����� �������� ����� ����������� ���, ��� ��� ���������� �����
��������� ����� �� ����������� ����, ��� ����� ��������� ��������� ��� ��������������.
����� ����, �������������� ���������, ���������� ��� �����������, ������ �����, ��� ���
��������������—�� ������ ������ ������������ ����� ����������� �����, �������, ���
������������ �� �� ������������ �������, ��� � � ���.
� ����� �������������� ������ ������ Pascal, C � C++. C � C++ �������� ������������
������ �������, � ������ �������� ��� ������� �������������; Pascal, � ������ �������,
�������������� ��� ���� ��� ��������, � ����� ��� ������. � ������� �������� �������
FreeBSD ��������� Pascal �� ��������, ������ � ��������� ������ ������� ���������� GNU
Pascal Compiler (gpc).
��� ��� ���� ��������������-����������-������-������� �������� ��� �������������
��������� ��������, ������ ������������� ������������ ������������ ����������
��������������� ����� ���������� (�����ݣ��� IDE —
Integrated Development Environment). � ������� �������� FreeBSD IDE �� ������, ������ �
������ ������ ������� evel/kdevelop, � � ���� ����� ������ ���������� Emacs. ������������� Emacs � ��������
IDE ����������� � Section 2.7.
2.4 ���������� ��� ������ cc
���� ������ �������� ������ GNU-����������� ��� C � C++, ��� ��� �� ������������
������ � �������� FreeBSD. �� ����� ���� ������ ��������� cc ���
gcc. ����������� �� ��������� �������� � ������� ��������������
������� �� ����������� �������������� � ������ ������ ����������� � ������������ �
���������� ������� ������ ��������������.
��� ������ �� �������� ���� ��������, ��������� ����� �������� �������������� ��� �
�����, ��� ����� (��������!) ��������� �� FreeBSD. ��� ������ ���������� � ���������
�����, ������ �� ������� �������� ��������� ����������.
-
��������������� ��������� ��������� ���� ��� �������� ������������ � ���������� ������
���������, ��������� ��������� �������� � ����� C. -
�������������� �������� ������ ���� �� ������� ��������� �������������� ��������
�����. ���� ������� ������������, �� ���� ����� ��������! -
�������������� ��������� ���� � ��� �� ����� ����������—�� ����� ������ � ���������
����, �� ��� ��� ������� ��������. �����������. [2] -
�������������� ������������� ���� � �������� ���—��, �� ����� � ���� ���� � �����,
����� ������ ���� � �������. -
�������� �� ��, ��� �� ������������ ����� ����, ��� ������� � ���������� ����������
���������. ��������, ���� �� ���������� � �������������� �������, �� ��� �����
�������. -
���� �� ��������� �������� ���������� ���� �� ���������� ������ � ��������� ��������,
������ ��� ���, ��� �� ����������. -
������ ��� ���������� ����, ��� ��������� ������ ��������� � ������ � ���������.
-
�������, ������ ����������� ����� � �������� �������.
������ ���������� ����� ������������ ��� ����������� ��������
�� ����� �� 1 �� 4—��������� ���� �������� �����������. ������
��� 1 �������� ��������������� ����������, � ���� 3-4 ����������������.
� �������, ����� ��� ��� ������ ������ �� ���, cc ���
�������� ��������� ��������� �� ��� ������� ���� ���� �������� � ����������� �����������;
������� �����
% cc foobar.c
�������� � ���������� foobar.c ����������� ���� ����� ����.
���� � ��� ������� ��� ���������� ������ ������ �����, ������ �������� ����� �����
����������
% cc foo.c bar.c
��������, ��� �������������� ��������—��� ������ �������� ����������. ��� ���� ��
����������� �������� �� ������� ��������� ���� ���������� ������, ���� ��������� �
����������� ���� ��� ������������� ����������� ���������� ���, ��� �� ������ ������������
��������. [3]
������� �������� ���������� ���������� ��� cc, ��� ���
������� �� ���������� ��������. ��� ��������� �� ����� ������, � ��������� ��
�������������.
- -o filename
-
��� ��������� �����. ���� �� �� ����������� ���� ��������, cc
����������� ���������� ���� � ������ a.out. [4]% cc foobar.c ���������� ���� ���������� a.out % cc -o foobar foobar.c ���������� ���� ���������� foobar
- -c
-
��������� ������ ���������� �����, ��� ����������. ������� ��� ���������� ��������,
����� �� ������ ������ ��������� ���������, ��� ��� ������������� Makefile.� ���������� ����� ������������ ��������� ���� (�� ����������
����) � ������ foobar.o. �� ����� ���� ����������� � �������
���������� ������� ��� ��������� ����������� �����. - -g
-
������� ���������� ������ ����������� �����. ���� �������� ��������� �����������
��������� � ���������� ���� ���������� � ���, ����� ������ ������ ����� � ��������
������� ������ ������ ������� �������������. �������� ����� ������������ ��� ����������
��� ������ ��������� ���� ��� ��������� ���������� ���������, ��� ����� �������; ������� �������� ��, ���
��� ��� �������������� ���������� ������ ��������� ������� �������. ������ ��
������������ � ���������� -g ��� ������ ��� ����������, �
�����, ����� ��������� � ����������������� ���������, ������������ «�������������
������» ��� ��������� -g.��� ���� ����� ������������� ���������� ������ ���������. [5]
- -O
-
������� ���������������� ������ ����������� �����. ���������� ��������� � ���������
���������� ��� ����, ����� ������������� ���������� ����, ������������� �������, ���
������. ����� ����� -O �� ������ �������� �����, �����������
�������� �����������, �� ������������� ����� �� �������� �� ������ �����������
�����������. ��������, ��������, ��� ������ ����������� cc,
������������ � FreeBSD ������ 2.1.0, ��� ��������� �������� ���������� �������� ��� ���
������������� ����� -O2.������ ����������� ���������� ��� ���������� ������������� ������.
% cc -O -o foobar foobar.c
�� ���� ������� ����� ������� ���������������� ������ ��������� foobar.
��������� ��� ����� �������� cc ��������� ��� ��� ��
������������ ���������� �������������� ���������, ����� ����������� ���������� ANSI, ����, ������ ������, ��� �������� ISO.
- -Wall
-
�������� ������ ���� ��������������, ������� ��������� ������ ������ ������ cc. �������� �� ���� ��������, ��� ���� ���������� ������ �� ����
��������������, �� ������� �������� ���������� cc. - -ansi
-
��������� �����������, ���� �� ���, ��-ANSI ���������� ����� C, ��������� � cc. �������� �� ��������, ���� �������� �� �����������, ��� ��� ���
����� ������ ��������������� ���������. - -pedantic
-
��������� ��� ���������� C,
��������� � ����������� cc, �� ��������������� ���������
ANSI.
��� ���� ������ ���������� cc �������� ��� ������������
��������� ������������� ���������� �����. ��������� �� ��� ������ �������, �� �� �����
�������� ��� ������������� ������ ������������—���������� ����� �� ���������� ���������
�������� ����������� ����������� ������ ���, ������� ����� �������� � ����� ������������
� ����� �������. ����� ��� ���������� ����������� �����.
������ ������, �� ������ ��������� ������ ��� ����� ����� ����������� ���, ����� ���
�����, ����� ����, �������� ��������� ������������ ���������, ����� ��������� �� ��������
���-�� ���—� ��� �����, ��� �� ������ ������������ ����� ��������� ���?
% cc -Wall -ansi -pedantic -o foobar foobar.c
�� ���� ������� ����� �������� �� ������������ ��������� ����� foobar.c ����� ������������ ���������� ���� foobar.
- -llibrary
-
������ ���������� �������, ������� ����� �������������� �� ����� ����������.
� �������� ������ ����������������� ������� ����� �������� ���������� ���������,
������������ ��������� �������������� ������� �� ����� C. � ������� �� ������ ��������,
������� ���������� �� ����������� ����������, � ��� ����� ������� �����������, ��� ��
����� ������������.��� ���� ���� ���������� ���������� libsomething.a, �� ��������� ��������� cc �������� -lsomething. ��������, �������������� ���������� ����������
libm.a, ��� ��� �� ��������� ��������� cc �������� -lm. ��������� «���������»
��� ������ � �������������� ����������� �������� ��, ��� � ��������� ������ ��� ������
���� ������� � �������� ��������� ����������.% cc -o foobar foobar.c -lm
�� ���� ������� ���������� �������������� ������� ����� ������������ � foobar.
���� �� ������������ ��� �� ����� C++, ��� ����� �������� �������� -lg++, ��� -lstdc++ ��� �������������
FreeBSD 2.2 � ����, � ���������� ��������� ������ ��� ���������� ���������� ������� C++.
���� �� ������ ��������� ������ cc ���������� c++, ������� ������� ��� �� ���. �� FreeBSD c++ ����� ���� ������ ��� g++.% cc -o foobar foobar.cc -lg++ For FreeBSD 2.1.6 and earlier % cc -o foobar foobar.cc -lstdc++ For FreeBSD 2.2 and later % c++ -o foobar foobar.cc
� ������ �� ���� ��������� �� ����� foobar.cc � ��������
����� C++ ����� ������ ���������� ���� foobar. ��������, ��� �
Unix-�������� ����� � �������� ����� C++ ����������� ������������ �� .C, .cxx ��� .cc, � ������� �� ����� MS-DOS .cpp
(������� ��� ������������� ��� ����-�� ���). gcc ���������� ���
��� ����������� ����, ����� ���������� ������������; ������ ��� ����������� ������ ��
����� ����, ��� ��� �� ������ ������������ �������� ���� ����� � ����� C++ .cpp!
2.4.1 ����� ����������� ������� � ��������
� cc
- 2.4.1.1. � ������� �������� ���������, ������� ����������
�������sin()
� ������� ����� ������. ��� ���
��������? - 2.4.1.2. ��� ������������, ����� ���������������� �
������������� ��������� -lm, � ������� ��� ����� �������
���������. ���, ��� ��� ������, ����������� � ���������� ����� 2.1 � ������
�������. - 2.4.1.3. ��� ��� ��� ���������?
- 2.4.1.4. � ������������ ���� � ������ foobar.c, �� �� ���� ����� ���������� ���� � ������ foobar. ���� �� ���������?
- 2.4.1.5. ������, � ���� ��������� ���������� ���� � ������ foobar, � ���� ������ ��� ��� ������� ������� ls, �� ����� � ������� � ��������� ������ foobar, �������� ��������� �� ���������� ������ �����. ������ �� ��
����� ���� ������? - 2.4.1.6. � ������ ��� ���������� ���� test, �� ��� ������� ��� ��������� ������ �� ����������. � ���
����? - 2.4.1.7. � �������������� ��� ���������, � ������� ��� ��������
���������, �� ����� �������� ��������� �� ������ � ���������� «core dumped». ��� ��� ��������? - 2.4.1.8. �������������, �� ��� � ������ ������ ������?
- 2.4.1.9. ����� ��� ��������� ���������� ����, ��� ������
��������� «segmentation fault». ��� ��� �����? - 2.4.1.10. ������ ��� ��������� ����� ������ �������� ���������
«bus error». � ���� ����� ��� Unix ������������, ��� ���
�������� ��������� �������� � �������������, �� ��������� �������� ���������. ���
������? - 2.4.1.11. ��� ����� ������, ���� ��������, ����� ���������
������ ���������, ���� � ����� �������� ��, ����� ������. ���� �� � ��� ������, ��� ���
����� ����� ��������� ������?
2.4.1.1. � ������� �������� ���������,
������� ���������� ������� sin()
� ������� ����� ������.
��� ��� ��������?
/var/tmp/cc0143941.o: Undefined symbol `_sin' referenced from text segment
��� ������������� ����� �������������� �������, ��� sin()
, ��� ����� ������� ����������� cc
�� ���������� � �������������� �����������, ��� ���:
% cc -o foobar foobar.c -lm
2.4.1.2. ��� ������������, �����
���������������� � ������������� ��������� -lm, � ������� ���
����� ������� ���������. ���, ��� ��� ������, ����������� � ���������� ����� 2.1 � ������
�������.
#include <stdio.h> int main() { float f; f = pow(2.1, 6); printf("2.1 ^ 6 = %f\n", f); return 0; }
� � ���������� �� ��� ���:
��� �� � �������, �� ��� �� ������� ������� ��� ���:
% ./a.out 2.1 ^ 6 = 1023.000000
��� ������������ ���������! ���
����������?
����� ���������� �����, ��� �� ��������� �������, �� �������� ����� ��� ���
����������. ���� ��� ���, �� ��������������, ��� ������� ���������� �������� ���� int, ��� ����������� �� �������� ���, ��� �� ����� � ����.
2.4.1.3. ��� ��� ��� ���������?
���������� �������������� ������� ��������� � ����� math.h. ���� �� ��������� ���� ����, �� ���������� ������ �����
���������� � ���������� ��������� �������� ���� � ������ ���������!
#include <math.h> #include <stdio.h> int main() { ...
����� ���������� ����� �� �������, ��� � ������, ��������� ��������� �����:
% ./a.out 2.1 ^ 6 = 85.766121
���� �� ����������� �����-���� �������������� �������, ������ ��������� ���� math.h � ��
�������� ��������� ���������� � �������������� �����������.
2.4.1.4. � ������������ ���� � ������
foobar.c, �� �� ���� ����� ���������� ���� � ������ foobar. ���� �� ���������?
���������, ��� cc ����� �������� ���������� ���� a.out, ���� �� �� �������� ��� ����. �������������� ������ -o filename:
2.4.1.5. ������, � ���� ���������
���������� ���� � ������ foobar, � ���� ������ ��� ��� �������
������� ls, �� ����� � ������� � ��������� ������ foobar, �������� ��������� �� ���������� ������ �����. ������ �� ��
����� ���� ������?
� ������� �� MS-DOS, Unix �� ������������� ������� �������, ����� ��������
����� ���������� ����, ������� �� ������ ���������, ���� �� ���� ��� �������. ����
������� ������� ./foobar, ������� ��������, ��� «�����
��������� ���� � ������ foobar, ��������������� � �������
��������», ��� �������� ���� ���������� ��������� PATH, ����� ���
��������� �������� ���
bin:/usr/bin:/usr/local/bin:.
����� � ����� �������� «���������� � ������� ��������, ���� � ������ ������ ��
�������».
2.4.1.6. � ������ ��� ���������� ����
test, �� ��� ������� ��� ��������� ������ �� ����������. � ���
����?
� ����������� Unix-������ � �������� /usr/bin
������������ ��������� � ������ test � �� ����, ��� ��������
��������� �� �������� ��������, ��� �������� ������ ��. ��������:
���� �������� ����� ���������� ��� ����� ��������� ���!
2.4.1.7. � �������������� ��� ���������,
� ������� ��� �������� ���������, �� ����� �������� ��������� �� ������ � ����������
«core dumped». ��� ��� ��������?
����� core dump (����� �����) ����� ��������������
������� ������ ���� Unix, ����� � �������� ��������� ��� �������� ������ � �������
�������������� ������ �� ��������� ����������� (core). � �����, ���� � ��������� ���
��������� �������� ��������� ������, ������� ���������� ���������� ������ �� ���������
����������� �� ���� � ���� � ������ core, � ������� ����� ���
����������� ������� ������������ ��� ���������� �����������.
2.4.1.8. �������������, �� ��� � ������
������ ������?
��� ������� ����� �������������� ���������� gdb
(���������� Section 2.6).
2.4.1.9. ����� ��� ��������� ����������
����, ��� ������ ��������� «segmentation fault». ��� ���
�����?
� �������� ��� ������, ��� ���� ��������� �������� ��������� � ������ �����-��
������������ ��������; Unix �������� ���, ��� �������� ������������ ������� � ������
��������� �� ����������� ���������� ��������.
����� ������������ ��������� ����� ��������:
-
������� ������ � ������� ������, �� ������� ��������� ��������� �� ��������� NULL, ��������
char *foo = NULL; strcpy(foo, "bang!");
-
������������� ���������, Using a pointer that hasn’t been initialised, eg
char *foo; strcpy(foo, "bang!");
��������� ����� ����� ��������� ��������� ��������, �������, ������, ��������� ��
������� ������, ����������� ����� ���������, � ���� ����� ��������� ���� ��������� ��
����, ��� ��� ������ ��������� ���-��. ���� ��� �� �������, �� �� ����� ��������� ��
������� ���-�� � ����� ����������� ���������, � �������� ���� �� ����� �������� ������,
��� �������� � ����������� �����. -
������� ������ �� ������� �������, � �������
int bar[20]; bar[27] = 6;
-
������� ���������� ������ � ������� ������, ��������� ������ � ������ ������,
��������,char *foo = "My string"; strcpy(foo, "bang!");
����������� Unix ����� ��������� ��������� ��������� ���� «My
string» � �������� ������, ��������� ������ ��� ������. -
���������� ������������ �������� � ���������
malloc()
�
free()
, ��������char bar[80]; free(bar);
���
char *foo = malloc(27); free(foo); free(foo);
��������� �����-���� �� ���� ������ �� ������ �������� � ������, �� ��������� �����
������ �� �����. ��������� ������� � ����������� ����� ������, ��� ������, ��� ������
���������, ��������� ���������� � ����� �������, ����� �� ����������� � ������.
2.4.1.10. ������ ��� ��������� �����
������ �������� ��������� «bus error». � ���� ����� ��� Unix
������������, ��� ��� �������� ��������� �������� � �������������, �� ��������� ��������
���������. ��� ������?
���, � �������, ��� (����, �������, � ��� ������������� ��� ������� �
�������������…). ������ ��� �������� ��� ����� �������� �������, ��� �� ����������� �
������ ������������ �������.
2.4.1.11. ��� ����� ������, ����
��������, ����� ��������� ������ ���������, ���� � ����� �������� ��, ����� ������. ����
�� � ��� ������, ��� ��� ����� ����� ��������� ������?
��, ������, ������� �� ������ ������� ��� xterm, ������� �������
% ps
��� ����������� �������������� ��������, ���������������� ����� ���������, � ���������
�������
% kill -ABRT pid
��� pid ��� �����
��������������� ��������, ������� �� �����.
��� �������, ���� ���� ���������, ��������, ������ � ����������� ����. ���� ����
��������� ������������� ������ SIGABRT, ���� ��������� ������
��������, ������� �������� � ��������� ����������.
�������������� �������� �������� �������� ���������� ����� �� ����� ��������� ���
������ ������ ������� abort()
. ��� ����������� ��������
���������� � �������� ������� �� abort(3).
���� �� ������ ������� ��������� ���� ����� ���������, �� �� ������ ����������� ������
���������, �� ������ ������������ ��������� gcore. ���������� �
���������� �������� �� gcore(1) ��� ���������
����� ������ ����������.
2.5 Make
2.5.1 ��� ������������ ����� ������� make?
����� �� ��������� ��� ������� ����������, ��������� ����� ���� �� ������ ��� ����
������ � �������� �������, ������ �������
% cc file1.c file2.c
�� ��� �� � ��������������, �� ��� ������ ���������, ���� ������� ��������� ������—�
� ���� �� ��� �������� ����������.
����� �� �������� �������� ����� �������� ������������� ��������� ������ �
�������������� ������ ��� ������ � �������� �������, ������� ���� ��������. ��� ��� ��
����� ������ ����� ����� ����������:
% cc file1.o file2.o ... file37.c ...
���� �� �������� ���� file37.c, � ������ ����� �� �������� �
������� ����������. ��� ����� ����������� �������� ����������, �� �� ������ �������� �
������� ������.
���� �� ����� �������� ������ �� ����� ���������� ���������� ��� ������� �������� �
������� ������, �� ��� ���� ����� ������������������� ���, ��� ������ ���� ������
������������� ��� �������� �������.
��� ��������, ���� �� ����� ���� � ������� ������ �������� �������? ���, ���� ��
�������� � ������� � ������� ������, ������� �������� �������� ��� � ���, ��� ���
�������� ���� �� �� ������ � �������� �����, ������� �� ����������?
��������, �� ����� ���������� ��� ���� ������ � �������� ����� ������, ������� �����
��������� ��������� �������, ������������, ����� �� �������������� ����� � ��������
�������. ������ ���, ��� ��� �����, ��� ���������, ������� �������� ����� �������, ���
��� ��� ������� ������ ��� ���������� ����������.
��� ��������� ���������� make. ��� ������ ����, ���������� make-������, �����������, ��� ��������� ����� ������� ���� ��
�����, � ����������, ����� ������ ��������� ��������������, � ����� ���. ��������,
������� ����� �������� ����� ����� «���� fromboz.o ������, ���
fromboz.c, �� ��� ������, ��� ���-�� ������� fromboz.c, ������� ���� ���� ����� �����������������». �
make-����� ����� ������� �������, ����������� ��������� make, ��� ������ ����������������� ���� � �������� �������, �����
��� ������� ������� ����� ������ ������������.
Make-����� ������ ������������� � ��� �� ����� ��������, ��� � �������� �����, �
������� ��� ����� ���������, � ����� ���������� makefile, Makefile ��� MAKEFILE. �����������
������������� ���������� ��� Makefile, ��� ��� ��� ���� ���
����� �������� � ������ ������ ������ ��������, ��� ��� ����� �������. [6]
2.5.2 ������ ������������� ������� make
��� ����� ������� make-����:
foo: foo.c cc -o foo foo.c
�� �������� ��� ������, ������ ����������� � ������ ��������.
����� ������ ����������� ������� �� ����� ��������� (���������� ����� (target)), �� ������� ������� ���������, ����� ������ � ���
��������� �����. ����� ��������� make ������ ��� ������, ���
����������, ���������� �� foo; ���� ��� ����������, ��
������������ ������� ��������� ����������� foo � foo.c. ���� foo �� ���������� ��� ���
������, ��� foo.c, �� ����� ��������� ������ �������� ���
����������� ����, ��� �� ����� �����������. ������� �������, ��� ������� ��� �����������
������������� �������������� foo.c.
������ �������� ���������� � ������� ��������� (�������
������� tab) � �������, ������� �� ������ ���� �� ������� ���
�������� foo, ���� �� �������� � ������ ��������� ������. ����
foo �������� ��� �� ����������, �� make ��������� ��� ������� ��� �� ��������. ������� �������, ���
�������, ������� ���������, ��� ������ ����������������� foo.c.
����, ����� �� ������� ������� make, ��� ���������, ���
foo ����� ��������������� ��������� ���������� � foo.c. ���� ������ ����� ���� ������ � Makefile � ������� �����—�������������, �� FreeBSD ��������
��������� ���������������� ������������ �������, ������ ������ make world � ��������������� ��������!
������ �������� ��������� make-������ �������� ��, ��� � ����� �� ����������� ������
���� ���������. ��������, �� ����� ������� ����� make-����:
foo: foo.c cc -o foo foo.c install: cp foo /home/me
�� ����� ������� ��������� make, ����� ���� �� ���������� ���������, ������:
% make target
�� ���� ������� make ����� �������� ������ �� ��� ���� �
������������ ��� ������. ��������, ���� �� ������� make foo
� make-������ ����, �� make ����� ������������ ���� install.
���� �� ������ ������� make ��� ����������, �� make
������ ����� ������ ������ ���� � ����� ����������� ��� ��������� ������ �����. ��� ���
���� � ����� ������ �� ������� make, �� ��� �������� � ����
foo, ��������������� foo, ���� ���
�����, � ����� ����������� ��� �������� � ���� install.
��������, ��� ���� install �� ����� ���� �� ������� �� ��
����! ��� ������, ��� ������� � ��������� ������ ����������� ������, ����� �� ��������
��������� ��� ����, ������� make install. � ���� ������ foo ����� ������������ � �������� ������� ������������. ��� �����
������������ � make-������ ����������, ��� ��������� ���������� � ���������� �������
����� �������� ����������.
��� ����� ������� ��� ���������� �������. ���� �� �� ����� ���������, ��� �������� make, ����� ����� �������� ������� ��������� ���� «hello world»,
������� make-����, �������� �������������� � ��������������������. ����� ����������
������������ ����� ��� ���� �������� ����, ��� �������� ����, ���������� include-����.
����� ����� ������� ������� touch—��� �������� ���� ����� ���
��� ��������������.
2.5.3 Make � include-�����
��� �� ����� C ����� ���������� �� ������ ���������� ������, ��������, stdio.h.
��������� �� ���� ������ �������� ���������� ����������� �������, � ��������� ��������� �
�������, ��� ������� �� ������ ���������:
#include <stdio.h> #include "foo.h" int main(....
��� ����������� ����, ��� ���� ���� ����� ���������������� � ������ ��������� foo.h, �������� ��� � ��� Makefile:
foo: foo.c foo.h
�����, ����� ��� ������ ������ �ӣ ������ � � ��� �������� �ӣ ������ � ������
����������� include-������, ������� ����� ������������, ����������� ��� ���������� �����
� �����, �� ��� ���������, ����� ��������������. ���� �� �������� include-����, �� ������
����������������� ��� �����, ��������� �� ����, ��������� ����� �������������. � gcc ������� ��������, ����������� ������������� ���� ����� �
�������� �������� ���������� ������ � �� ������������: -MM.
���� �� �������� ��������� � ��� Makefile:
depend: gcc -E -MM *.c > .depend
� ��������� make depend, �� �������� ���� .depend, ���������� ������ ��������� ������, C-������ �
include-������:
foo.o: foo.c foo.h
���� �� ��������� foo.h, �� ��� ��������� ������� make ��� �����, ��������� �� foo.h, �����
�����������������.
�� ��������� ��������� make depend ������ ��� ��� ����������
include-����� � ������ �� ����� ������.
2.5.4 Make-����� FreeBSD
Make-����� ����� ��������� �������� ��� ��������. � �������, ������� �� ������ BSD,
�����, ��� FreeBSD, ������������ � ����������� ����� ������� � ������� �������. �����
����� ������� �������� �������� ������� ������ FreeBSD. ��� �������� ����� ��������� Makefile �����:
MASTER_SITES= ftp://freefall.cdrom.com/pub/FreeBSD/LOCAL_PORTS/ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz .include <bsd.port.mk>
������, ���� �� �������� � ������� � ���� ������ � ������� ������� make, �� �������� ��� ���:
-
�������� �������� �� ������� ��������� ���� ����� ����� � �������.
-
���� ��� ���, �������������� FTP-���������� � URL, ���������� � MASTER_SITES, ��� ������� ��������� ������.
-
����������� ����������� ����� �������� ������� � ������������ � ��������� �����������
������ ������������ ����� �������� �������. ��� �������� ��� ����, ����� ���������
����������� �������� ������� ����� ���������. -
�������� ��� ���������, ��������� ��� ����, ����� �������� ��� ������� ��
FreeBSD—���� ������� ����� �������� ������� (patching). -
����������� ��� ���������, ��������� ��� �������� �������. (������ ������������
Unix-�������� �������� ����������, �� ����� ������ Unix ��� ������������� � �����
�������������� ����������� Unix �������—��� ���������� ���������� �������� � ���������
������ FreeBSD). -
������������� �������� ��� ���������. � ���������, �� ������ ������� �� ���, � �������
���� ����������� �������� ������ � ��������� ������� make—�
����������� make-����� ��������� ������� ����������� ��� ���������� ���������
����������. -
������ � ��� ���� ����������������� ������ ���������. ���� �� �����, �� ����� ��
��������������; ����� �� ��������� ���������� ��, �� ����� ������ ������� make install. ��� ���� ��������� � ��� ����������� ��� ������
����� ����� ����������� � ���������� ��������; � ���� ������ �
�������� ����� ������� ������, ����� ���� ��� ���� ����� � ��������� ������, ����
�� ��� �� ����������.
������, � �����, �� �����������, ��� ��� �������� �� ������� ����� ��� �������� �����
�����������!
������ �������� � ��������� ������, ������� ��������� ��������� make �� ��������� ���������� make-����� � ������ bsd.port.mk. ����� ���������� ��� �������, �� ������ � ���
���������� ��� ��� ��������—���-�� ������� make-����, ����������� ��������� make �� ���������� ���� ������������� �������� (���� ��� ������ ����
�� ���������, ������� ��������� ������, ������� ����� ����������) � ����� ����� ��������
������ � ����, ������ ������� ���� ������� � ����������� make-����!
���� �� ������ ��������� �� ��� ��������� make-�����, �� ��� ��������� � �������� /usr/share/mk, ��, ��������, ����� ������� ��������� ��������
������ � make-�������, ��� ��� ��� ����� ������ (� ���� �� ������ � ��� �����������,
����������� ������� ��� ����� ������ � ������� ����!)
2.5.5 ����������� ������������� ���������
make
Make �������� ����� ������ ������������, � ����� ������
������� ������, ��� ��������� ������� �������, ����������� ����. � ���������, �������
��������� ��������� ������ make, � ��� ��� �����������
���������� ���� �� �����. ��������, ������ �������� ��������, ��� ��� ����� ������,
�������� ������ ������������—��������, ��� ��� �������� ���� ��� �������� ��������,
������� ������� ��� � ����.
������ make, ������������ � FreeBSD, �������� Berkeley
make; ����������� ��������� � ����� for it in /usr/share/doc/psd/12.make. ����� ��� �����������, ���������
% zmore paper.ascii.gz
� ���� ��������.
������ ���������� � ��������� ������ ���������� GNU make, �
������� ������������ ������� ����� ������� «info». ���� �� ������������� �����-���� ��
����� ������, �� GNU make ����� ������������� ���������� ���
������ gmake. �� ����� ��� �������� � ���� ����� � �������.
����� ����������� info-�������� �� GNU make, ��� ��������
��������������� ���� dir � �������� /usr/local/info, ������� ��� ��� ������. ��� �������� ����������
�������� ����� ������
* Make: (make). The GNU Make utility.
� ����. ��� ������ �� ��� ��������, ������� ������� ������� info � ������� ����� ��
���� (��� � ��������� Emacs ������ C-h
i).
2.6 �������
2.6.1 ��������
��������, ������������ � FreeBSD, ���������� gdb (GNU debugger). �� ����������� �� �������
% gdb progname
���� ����������� ������������ ��������� ��� �� Emacs. ��
������ ������� ��� ���:
M-x gdb RET progname RET
������������� ��������� ��������� ��� ��������� ��������� � ����� ��������������
���������. ��� �������, �� ������� ��������� ��������� � ��������� ������ ���������,
������� �������� ����������, �������� ��, ��������� ��������� ��������� ��������� ��
������������� ����� � ����� ������������, � ��� �����. �� ���� ������ ������������ � ���
���������� ��������� ��� ��������� ���� ����� ��� �������� ������� ������ � ���������.
�������� ���� �������� ����, ���� ��� �������� �������� ������, ��� �������
���������������� ����������, ������� �������� ���� ������.
� gdb ������� ���������� ������� ���������� ������� ������, �
����� ����� info-�������, ��� ��� � ���� ������� ���� ����� �������� �� ���������
�������� ������.
�������, ���� �� ��������, ��� ��� ������ ������ � ����� ��������� ������ � ���������
������ ��������, �� � ��������� ������ ��� ���� ������� ����������� ���������� xxgdb.
���� ������ ������������ ���� ��������� � ������������� gdb �
�� ��������� ����������� �������, �����, ��� ������� ����.
2.6.2 ������ ��������� �
���������
����� �������� ������������ ��������� �� ������������� gdb,
��� ����� ��������������� ��������� � ���������� -g. ��������
����� �������� � ��� ���� �����, �� �� ������� ������� ������ �������� ������� �������,
�� �� �� �������� ���. ���� �� ������� ����� ���������:
... (no debugging symbols found) ...
��� ������� gdb, �� ����������, ��� ��������� �� ����
��������������� � ������ -g.
� ����������� gdb �������� ������� break main. ��� ������ ��������� ���������� ���������������
���������������� ��� ��������� � ������ ����� � ������ ����. ������ ������� ������� run ��� ������� ���������—��� ������ ����������� �
����������������� ���� � ����� ����� ����������� ���������� ��� ������ main()
. (���� �� �����-���� ����������, ������ ���������� main()
, �� ������ �� ������ �����!).
������ �� ������ ��������� ��������� ��������� �� �����, ������� n. ���� �� ������ �� ����� �������, �� ������ ������� � ���, �����
s. ���������� � ������ �������, �� ������ ��������� ��
���������� ���������� ������� �������� f. �� ������ �����
������������ ������� up � down ���
��������� ���������� ������������.
��� ������� ������ ����, ��� ������� ������ � ��������� ��� ������ gdb. ��� ���� ��������� (� ��������� ���������� �������):
#include <stdio.h> int bazz(int anint); main() { int i; printf("This is my program\n"); bazz(i); return 0; } int bazz(int anint) { printf("You gave me %d\n", anint); return anint; }
��� ��������� ������������� �������� ���������� i ������
5 � �������� �� � ������� bazz()
, ������� ������� ���������� ���� �����.
��� ���������� � ������� ��������� �� ��������
% cc -g -o temp temp.c % ./temp This is my program anint = 4231
��� �� ��, ��� �� �������! ����� ����� ����������, ��� �� ����������!
% gdb temp GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc. (gdb) break main ������� ���������� ���� Breakpoint 1 at 0x160f: file temp.c, line 9. gdb ������������� ����� �������� �main()
(gdb) run ������ �� ������main()
Starting program: /home/james/tmp/temp ��������� �������� �������� Breakpoint 1, main () at temp.c:9 gdb ��������������� �main()
(gdb) n ������� � ��������� ������ This is my program ��������� ������� (gdb) s ������� �bazz()
bazz (anint=4231) at temp.c:17 gdb ������� ���� ������� (gdb)
���������! ��� �������� anint �������� ������ 4231? ����� �� �� ��������� ��� �������� 5 � ������� main()
? ������� ��������
� ������� main()
� �������� ����.
(gdb) up ������� ����� �� ����� ������� #1 0x1625 in main () at temp.c:11 gdb ������� ���� ������� (gdb) p i ����� �������� ���������� i $1 = 4231 gdb ������� 4231
� ����! ���� �� ����, �� ������ ���������������� ���������� i. �� ������ ������� ��� ���
... main() { int i; i = 5; printf("This is my program\n"); ...
�� ������ ��� ������ i=5;. ��� ��� �� �� ���������
��������� �������� ��� i, �� ���������� ��������� ���������
��������, ����������� � ��������������� ������� ������ ��� ������ ���������, � � �����
������ ��� ��������� ����� 4231.
Note: gdb ������� ���� ������� ������ ���, ����� ��
�������� ��� ������������ �� �������, ���� ���� �� ���������� ������� up � down ��� ����������� �� �����. ���
���� ��������� ��� ������� � �������� �� ����������, ��� �������� ��� �����������, ��� ��
��������� � ��� ����������. (���� �������� ��������, ��� ��������� ��������� ���������� �
������������ �������� ���������� � � ���, ���� ����� ������� ����� �������� ��
�������).
2.6.3 ������������ ����� �����
���� �����, ������ ������, �������� ������, ���������� ������ ����� �������� � ������
��� ����. � «������ ������ �������» ������������ �������� ����������������� ����������
������ ����� � ������� ��� ������������� �� �������� �����, �� ������ ����� ���������
�����������. � ���������, �� FreeBSD � ������ �������� �� ������ 4.4BSD ����� �����
���������� progname.core, � ��
������ core, ��� ����, ����� ���� ��������, � ����� ���������
��������� ��������������� ���� �����.
��� ������������ ����� ����� ��������� gdb ������� �������.
������ ����, ����� �������� ������� break ��� run, ��������
(gdb) core progname.core
���� �� �� � ��� �� ��������, ��� � ���� �����, �� ��� ����� ������� ��������� �������
dir /path/to/core/file.
�� ������ ������� ����� ����� ����������:
% gdb a.out GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc. (gdb) core a.out.core Core was generated by `a.out'. Program terminated with signal 11, Segmentation fault. Cannot access memory at address 0x7020796d. #0 0x164a in bazz (anint=0x5) at temp.c:17 (gdb)
� ���� ������ ��������� ���������� a.out, ��� ��� ���� �����
���������� a.out.core. �� ����� ������, ��� ���������
����������� �������� ��-�� ������� ������� � ������� ������, �� �����������, � �������
bazz
.
������ ������ ������� ����� ����������� �����������, ��� ������� ���� �������, ������
��� � ������� ��������� �������� ����� ��������� � ����� ����� �������� ����� �������.
������� bt ���������� gdb ������
�������� ����������� ����� �������:
(gdb) bt #0 0x164a in bazz (anint=0x5) at temp.c:17 #1 0xefbfd888 in end () #2 0x162c in main () at temp.c:11 (gdb)
��� ���� ��������� ���� ������� ������� end()
; � ����
������ ������� bazz()
���� ������� �� main()
.
2.6.4 ����������� � ����������
���������
����� �� ���������� ������������ gdb �������� ��, ��� ��
����� ������������ � ���������, ������� ��� �����������. �������, ��� ����
��������������, ��� � ��� ���������� ����������, ����� ��� �����������. ������� ��������
� ��������, ����� �� ������ ��������� ����������� ������������ ��������, �� ��������
��������� ��� ������������ ������ ������������.
� ���� �������� ����� ��������� ��� ���� �������� gdb,
��������������� �������� ps ��� ������ ��������������
������������ �������� � ��������� �������
(gdb) attach pid
� gdb, ����� ���� ���������� ��������� ������� �������.
«��� ��� ������», �������, ��������, ��, «�� � �������, ����� � ��� ��� ������,
����������� ������� ��� �������� ���� ������». ����� ����, � ���, ������� ��������, �
��� ��� ��� �������� (�������� info-��������� ��������� gdb):
... if ((pid = fork()) < 0) /* _Always_ check this */ error(); else if (pid == 0) { /* child */ int PauseMode = 1; while (PauseMode) sleep(10); /* Wait until someone attaches to us */ ... } else { /* parent */ ...
������ �ӣ, ��� ��� ����� �������, ��� ������������ � �����ģ����� ��������,
���������� �������� ���������� PauseMode � 0 � ��������� �������� �� ������ ������� sleep()
!
2.7 ������������� Emacs � �������� �����
����������
2.7.1 Emacs
� ���������, Unix-������� ������������ ��� ������ �� �� �� ����
�����������-���-���-��-��������-�-�������-������ ������-�����������-������
��������������� ����� ����������, ������� ������� � ������ ��������. [7] ������ �������
����������� ��������� ����������� �����. ��� ����� ���� �� ����� �� ��������, � �� �����
���������������, �� �� ������ ��������� �� ���, ��� ��� ����� �������. � ��� ���������. �
�������� �� �������� ���.
� ��� ��� ���������� Emacs. ��������� ������ � ���� ����������, �� ������ ��� �����.
���� �� �� ������, �� �����, ��� ���� ������ ���� ��� ������������. ����� ��� �����������
��������� ���������� ������ ��� ��� ������—� ���������� 8 �� ��� ���������� ������ � 16
�� ��� X � �������� ����������� ���������� ��� ��������� ������������������
������������������.
������ ������, Emacs �������� ���������� � ����� �������� ������������� �� ���
���������—�������������, �� ������� ���, ��� ������ ����� �� ������������ �������, ���
�� ��������! �� ����� ���� ������ ������������ � ��������� �������������� ��������
����������� ��� ���� ����� � ��������� Emacs, ������ �� ���� ������ ��� ���������� ������
� ��������.
����� ���� ������� ������ ���������� ������� ���, ��� ����� ������ Emacs, �� ���
������ ��������� �� ������������, �������������� ������� ��� �������������:
-
����� ������ ��������, ����������� ��������� ����� � ������ ��� �����, ��� �
���������� ��������� (��������), ������� � ������ ��� ����� �����, � ��� �����, � ����
��������. -
���������� ���� � ���������� ������� ������.
-
�������������� ��������� � ������������ �������� � ����������� �� �����.
-
������ ���������������.
-
� Emacs �� ������ ������������� � ���������� ���������.
-
��� ������������� ������ ���������� �� ������ ������� � ��������������� ������
��������� ����. -
������������� ��������� � ���������� info, ������������ ���
������ �������������� ������������ GNU, ������� ������������ �� ��� Emacs. -
������������� ��������� � ���������� gdb, �����������
������������ �� ��������� ���� � ������������ � ������ ���������� ���������. -
�� ������ ������ ��������������� Usenet � ����������� ����� �� ����� ����������
���������.
�, ����������, ������ �� ����, ��� � �� ��������.
Emacs ����� ���� ���������� �� FreeBSD ��� ���� Emacs.
����� ����, ��� �� ����� ����������, ��������� ��� � ������� C-h t ��� �������� �������� �� Emacs—��� �������� �����������
������� control � ������������� �������� �� ������� h, � ����������� ����������� ������� control �
�������� ������ t. (���� �� ������ ������������ ���� ��� ������
������ �� ���� ).
���� � Emacs ������� ����, ����� ������� ������������ ������������ �������, ��� ���
��� �������������� ����-���� ������� ������� ������ ��������� ������, ��� ������ ���� �
����� ������� � ������ �����. �, ���� �� ���������� � �������� �������������� Emacs, ��
�� ����������, ��� ��� ����� ������ ������ ����� ���� «M-x
replace-s RET foo RET bar RET», ��� ��� ������� �����, ��� ��� ��������. �, �
����� ������, � Emacs ������� ������� ����� �������� �������, ����� �������� �� ��� �
������� ����.
� �������, ���������� ����� ����� ������������ ����������, ��� ��� ��� ��������� �����
� ������� ����. � ������� ������������ ������� ����, ������, ��� �������� �����, �� ���
���, ���� �� �� �������, ��� ��� �������� � ������������ ���� ��������, � ������ �����
���������� ��������� C-x C-f. ����� �� ������ ���� �������������, ���������� � ��������
��������� ������� ����.
���� �� �� ������ ���������, ��� ������ ���������� ���������� ������, �������� �����
�� ���� �
�������� ��—Emacs ������, ��� ��� ������. �� ������ ����� ��������������� ������� ����
��� ������ ���� ������, ������� ��������
��������� �����, ������ � ������������ �����������.
������, ��������� ���� �������� ��������� ������� Meta,
������� x, ���������� ������� Meta, ����� replace-s (���������� ���
replace-string—��� ����� ������������ Emacs ��������
����������� ��������� �������). ������� ������� return, �����
foo (������, ������� �� ������ ��������), ������� �������
return, ����� bar (������, ������� ������� foo) � ������� return �����. Emacs
�������� �������� �� ������ � ������, ������� �� ������ ��� ���������.
���� �� �������������, � ����� ����� ������� ���� ��������� ������� Meta, �� ��� ������ �������, ������� ������� �� ������ �������
�������� Unix. � ���������, �� PC �� ���, ������� ������ ��� ������� alt (���, ���� ��� �� ������ �� �������, ������� escape).
��, ����� ����� �� Emacs, ������� C-x C-c (��� ��������
��������� ������� control, ������� �� x, ������� �� c � ���������� �������
control). ���� � ��� ���� �������� �������������� �����,
Emacs ������ ������ �� �� ����������. (�� ���������� �� �������� ������������, � �������
��������� � C-z ��� �� ������� ������� ������ �� Emacs—��� ����
Emacs �������� �������� � ������� ������ � ������������� ���������� � ������ ������ �
��������, �� ������� ��� ����������� ����������).
2.7.2 ��������� Emacs
Emacs ����� �������� �����������; ��������� �� ��� �������� �����������, ���������
����� ���������.
������ ����, ����� ������������ ��� ��������� ����������� �����-����, � Emacs
����������� ������ Lisp, ���������� �������������� ��� ����������, ��������� ���
��������� Emacs Lisp. ��� ����� ���� ��������� ������ ��������, ���� �� ������ ������
������� ���-�� ���� Common Lisp, ������ ��� �� ����������� ������, ��� Common Lisp (����
��� �� ������ �������!).
����� ����� ������� Emacs Lisp, ������ ������� ��
Emacs
������ ��� ���������� ��������� Emacs ��� ����� ����� ����� �� �� �� ���� Lisp, ���
��� � ������� ���� ������ ����� .emacs, �������� ��� ������
������ �������. ������ ���������� ��� � ���� �������� ������� � ������������� Emacs, ����
�� ��� �������; �� ������� ������� �� ����� � (�������) ���� ��� ���������� ���������
���������.
2.7.3 ������ ����� .emacs
� ���������, ����� ������� ����� �����, ����� ��������� ��������; ������ �� ���� ����
����� ������������ ���������.
-
���, ��� ���������� � ������� ;, �������� ������������ �
������������ Emacs. -
� ������ ������ -*- Emacs-Lisp -*- ����� ���
����, ����� �� ����� ������������� ��� ���� .emacs � ���������
Emacs � ����� ��� �������� �������������� ������� Emacs Lisp. Emacs ������ ��������
������� �������� ����������� �� ������ ����� �����, � ����� ��������� ����� �� ����������
� ������ .emacs. -
������� tab � ��������� ������� �������� ��� �������
������������ �������, ������� ��� ������� ������� ��������� � ������� ������ ���� �����
����������� ������. ���� �� ������ ���������� ���-���� ������ tab, �� ��� ������� ������� tab
����������� ������� control. -
This file supports syntax highlighting for C, C++, Perl, Lisp and Scheme, by guessing
the language from the filename. -
� Emacs ��� ������� ���������������� ������� � ������
next-error
. � ���� ������ ���������� ���������� ��� ��������� ���
������������� �� ����� ������ ���������� � ������ �� ������� M-n; �� ���������� �������������� �������previous-error
, ������� ��������� ���������� � ��������� ������
�� ������� M-p. ����� �������� ������������ �������� ��, ��� ��
������� C-c C-c ���� � �������� �������, � ������� ���������
������, ����� ������ �� ��������������� ������. -
�� �������� ����������� Emacs �������� ��� ������, ��� ��� ���� �� ������� ���-�� ���
Emacs � ������ ��������������� ����, �� ������ ������ �������% emacsclient filename
� ����� ����� ������� ������������� ���� � ����� Emacs! [8]
Example 2-1. ��������� ���� .emacs
;; -*-Emacs-Lisp-*- ;; This file is designed to be re-evaled; use the variable first-time ;; to avoid any problems with this. (defvar first-time t "Flag signifying this is the first time that .emacs has been evaled") ;; Meta (global-set-key "\M- " 'set-mark-command) (global-set-key "\M-\C-h" 'backward-kill-word) (global-set-key "\M-\C-r" 'query-replace) (global-set-key "\M-r" 'replace-string) (global-set-key "\M-g" 'goto-line) (global-set-key "\M-h" 'help-command) ;; Function keys (global-set-key [f1] 'manual-entry) (global-set-key [f2] 'info) (global-set-key [f3] 'repeat-complex-command) (global-set-key [f4] 'advertised-undo) (global-set-key [f5] 'eval-current-buffer) (global-set-key [f6] 'buffer-menu) (global-set-key [f7] 'other-window) (global-set-key [f8] 'find-file) (global-set-key [f9] 'save-buffer) (global-set-key [f10] 'next-error) (global-set-key [f11] 'compile) (global-set-key [f12] 'grep) (global-set-key [C-f1] 'compile) (global-set-key [C-f2] 'grep) (global-set-key [C-f3] 'next-error) (global-set-key [C-f4] 'previous-error) (global-set-key [C-f5] 'display-faces) (global-set-key [C-f8] 'dired) (global-set-key [C-f10] 'kill-compilation) ;; Keypad bindings (global-set-key [up] "\C-p") (global-set-key [down] "\C-n") (global-set-key [left] "\C-b") (global-set-key [right] "\C-f") (global-set-key [home] "\C-a") (global-set-key [end] "\C-e") (global-set-key [prior] "\M-v") (global-set-key [next] "\C-v") (global-set-key [C-up] "\M-\C-b") (global-set-key [C-down] "\M-\C-f") (global-set-key [C-left] "\M-b") (global-set-key [C-right] "\M-f") (global-set-key [C-home] "\M-<") (global-set-key [C-end] "\M->") (global-set-key [C-prior] "\M-<") (global-set-key [C-next] "\M->") ;; Mouse (global-set-key [mouse-3] 'imenu) ;; Misc (global-set-key [C-tab] "\C-q\t") ; Control tab quotes a tab. (setq backup-by-copying-when-mismatch t) ;; Treat 'y' or <CR> as yes, 'n' as no. (fset 'yes-or-no-p 'y-or-n-p) (define-key query-replace-map [return] 'act) (define-key query-replace-map [?\C-m] 'act) ;; Load packages (require 'desktop) (require 'tar-mode) ;; Pretty diff mode (autoload 'ediff-buffers "ediff" "Intelligent Emacs interface to diff" t) (autoload 'ediff-files "ediff" "Intelligent Emacs interface to diff" t) (autoload 'ediff-files-remote "ediff" "Intelligent Emacs interface to diff") (if first-time (setq auto-mode-alist (append '(("\\.cpp$" . c++-mode) ("\\.hpp$" . c++-mode) ("\\.lsp$" . lisp-mode) ("\\.scm$" . scheme-mode) ("\\.pl$" . perl-mode) ) auto-mode-alist))) ;; Auto font lock mode (defvar font-lock-auto-mode-list (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'lisp-mode 'perl-mode 'scheme-mode) "List of modes to always start in font-lock-mode") (defvar font-lock-mode-keyword-alist '((c++-c-mode . c-font-lock-keywords) (perl-mode . perl-font-lock-keywords)) "Associations between modes and keywords") (defun font-lock-auto-mode-select () "Automatically select font-lock-mode if the current major mode is in font-lock-auto-mode-list" (if (memq major-mode font-lock-auto-mode-list) (progn (font-lock-mode t)) ) ) (global-set-key [M-f1] 'font-lock-fontify-buffer) ;; New dabbrev stuff ;(require 'new-dabbrev) (setq dabbrev-always-check-other-buffers t) (setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_") (add-hook 'emacs-lisp-mode-hook '(lambda () (set (make-local-variable 'dabbrev-case-fold-search) nil) (set (make-local-variable 'dabbrev-case-replace) nil))) (add-hook 'c-mode-hook '(lambda () (set (make-local-variable 'dabbrev-case-fold-search) nil) (set (make-local-variable 'dabbrev-case-replace) nil))) (add-hook 'text-mode-hook '(lambda () (set (make-local-variable 'dabbrev-case-fold-search) t) (set (make-local-variable 'dabbrev-case-replace) t))) ;; C++ and C mode... (defun my-c++-mode-hook () (setq tab-width 4) (define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent) (define-key c++-mode-map "\C-ce" 'c-comment-edit) (setq c++-auto-hungry-initial-state 'none) (setq c++-delete-function 'backward-delete-char) (setq c++-tab-always-indent t) (setq c-indent-level 4) (setq c-continued-statement-offset 4) (setq c++-empty-arglist-indent 4)) (defun my-c-mode-hook () (setq tab-width 4) (define-key c-mode-map "\C-m" 'reindent-then-newline-and-indent) (define-key c-mode-map "\C-ce" 'c-comment-edit) (setq c-auto-hungry-initial-state 'none) (setq c-delete-function 'backward-delete-char) (setq c-tab-always-indent t) ;; BSD-ish indentation style (setq c-indent-level 4) (setq c-continued-statement-offset 4) (setq c-brace-offset -4) (setq c-argdecl-indent 0) (setq c-label-offset -4)) ;; Perl mode (defun my-perl-mode-hook () (setq tab-width 4) (define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent) (setq perl-indent-level 4) (setq perl-continued-statement-offset 4)) ;; Scheme mode... (defun my-scheme-mode-hook () (define-key scheme-mode-map "\C-m" 'reindent-then-newline-and-indent)) ;; Emacs-Lisp mode... (defun my-lisp-mode-hook () (define-key lisp-mode-map "\C-m" 'reindent-then-newline-and-indent) (define-key lisp-mode-map "\C-i" 'lisp-indent-line) (define-key lisp-mode-map "\C-j" 'eval-print-last-sexp)) ;; Add all of the hooks... (add-hook 'c++-mode-hook 'my-c++-mode-hook) (add-hook 'c-mode-hook 'my-c-mode-hook) (add-hook 'scheme-mode-hook 'my-scheme-mode-hook) (add-hook 'emacs-lisp-mode-hook 'my-lisp-mode-hook) (add-hook 'lisp-mode-hook 'my-lisp-mode-hook) (add-hook 'perl-mode-hook 'my-perl-mode-hook) ;; Complement to next-error (defun previous-error (n) "Visit previous compilation error message and corresponding source code." (interactive "p") (next-error (- n))) ;; Misc... (transient-mark-mode 1) (setq mark-even-if-inactive t) (setq visible-bell nil) (setq next-line-add-newlines nil) (setq compile-command "make") (setq suggest-key-bindings nil) (put 'eval-expression 'disabled nil) (put 'narrow-to-region 'disabled nil) (put 'set-goal-column 'disabled nil) ;; Elisp archive searching (autoload 'format-lisp-code-directory "lispdir" nil t) (autoload 'lisp-dir-apropos "lispdir" nil t) (autoload 'lisp-dir-retrieve "lispdir" nil t) (autoload 'lisp-dir-verify "lispdir" nil t) ;; Font lock mode (defun my-make-face (face colour &optional bold) "Create a face from a colour and optionally make it bold" (make-face face) (copy-face 'default face) (set-face-foreground face colour) (if bold (make-face-bold face)) ) (if (eq window-system 'x) (progn (my-make-face 'blue "blue") (my-make-face 'red "red") (my-make-face 'green "dark green") (setq font-lock-comment-face 'blue) (setq font-lock-string-face 'bold) (setq font-lock-type-face 'bold) (setq font-lock-keyword-face 'bold) (setq font-lock-function-name-face 'red) (setq font-lock-doc-string-face 'green) (add-hook 'find-file-hooks 'font-lock-auto-mode-select) (setq baud-rate 1000000) (global-set-key "\C-cmm" 'menu-bar-mode) (global-set-key "\C-cms" 'scroll-bar-mode) (global-set-key [backspace] 'backward-delete-char) ; (global-set-key [delete] 'delete-char) (standard-display-european t) (load-library "iso-transl"))) ;; X11 or PC using direct screen writes (if window-system (progn ;; (global-set-key [M-f1] 'hilit-repaint-command) ;; (global-set-key [M-f2] [?\C-u M-f1]) (setq hilit-mode-enable-list '(not text-mode c-mode c++-mode emacs-lisp-mode lisp-mode scheme-mode) hilit-auto-highlight nil hilit-auto-rehighlight 'visible hilit-inhibit-hooks nil hilit-inhibit-rebinding t) (require 'hilit19) (require 'paren)) (setq baud-rate 2400) ; For slow serial connections ) ;; TTY type terminal (if (and (not window-system) (not (equal system-type 'ms-dos))) (progn (if first-time (progn (keyboard-translate ?\C-h ?\C-?) (keyboard-translate ?\C-? ?\C-h))))) ;; Under UNIX (if (not (equal system-type 'ms-dos)) (progn (if first-time (server-start)))) ;; Add any face changes here (add-hook 'term-setup-hook 'my-term-setup-hook) (defun my-term-setup-hook () (if (eq window-system 'pc) (progn ;; (set-face-background 'default "red") ))) ;; Restore the "desktop" - do this as late as possible (if first-time (progn (desktop-load-default) (desktop-read))) ;; Indicate that this file has been read at least once (setq first-time nil) ;; No need to debug anything now (setq debug-on-error nil) ;; All done (message "All done, %s%s" (user-login-name) ".")
2.7.4 ���������� ���������� ������, �
�������� ����� �������� Emacs
����, ������, ���� �� ����������� ��������������� ������ �� ������, ��� ��������� �
����� .emacs (C, C++, Perl, Lisp � Scheme), �� ��� ��������,
���� ����� ����� ���� ��� ��������� «whizbang», � ������� ������� ����� ���������������
������������?
������ ����� ����� ���������, �� ������������ �� � ������ whizbang � ������� ���
Emacs, ������� ������ ��� �������� �����. ������ ��� ����� ��������� .el, ��� �������� «Emacs Lisp». ��������, ���� whizbang ��������
������ FreeBSDm �� ����� �������� ����� ����� ��������
% find /usr/ports/lang/whizbang -name "*.el" -print
� ���������� ��, ���������� �� � ������� Lisp ��� Emacs ����� �������. �� FreeBSD
2.1.0-RELEASE ��� ������� /usr/local/share/emacs/site-lisp.
���, ��� �������, ���� ��������� ���������� ������� ������ �������� ���
/usr/ports/lang/whizbang/work/misc/whizbang.el
�� �� ��������
# cp /usr/ports/lang/whizbang/work/misc/whizbang.el /usr/local/share/emacs/site-lisp
����� ��� ����� ������, ����� ���������� ����� ����� � ��������� �������� �� �����
whizbang. �����, ��� �������, ��� ��� ������������ �� .wiz. ���
����� �������� ������ � ��� ���� .emacs, ����� Emacs ����
������������ ���������� �� whizbang.el.
������� ������ auto-mode-alist � ����� .emacs � �������� ������ ��� whizbang, �����, ���:
... ("\\.lsp$" . lisp-mode) ("\\.wiz$" . whizbang-mode) ("\\.scm$" . scheme-mode) ...
��� ��������, ��� Emacs ����� ������������� ���������� � ����� whizbang-mode
, ����� �� ������������ ����, �������������� �� .wiz.
���� ���� �� ������� ������ ��� font-lock-auto-mode-list.
�������� � ��� whizbang-mode
���������� ����:
;; Auto font lock mode (defvar font-lock-auto-mode-list (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'whizbang-mode 'lisp-mode 'perl-mode 'scheme-mode) "List of modes to always start in font-lock-mode")
��� ��������, ��� Emacs ������ ����� ������������ ����� font-lock-mode
(�� ���� ��������� �������������� �����������) ���
�������������� ������ .wiz.
� ��� ���, ��� �����. ���� ���� ���-��, ��� �� ������ ������ ������������� ���
�������� ������ .wiz, �� ������ �������� ������ whizbang-mode hook
(�������� my-scheme-mode-hook
� �������� �������� �������, �������
��������� auto-indent
).
2.8 �������������� ����������
-
Brian Harvey and Matthew Wright Simply
Scheme MIT 1994. ISBN 0-262-08226-8 -
Randall Schwartz Learning Perl
O’Reilly 1993 ISBN 1-56592-042-2 -
Patrick Henry Winston and Berthold Klaus Paul Horn Lisp (3rd Edition) Addison-Wesley 1989 ISBN 0-201-08319-1
-
Brian W. Kernighan and Rob Pike The Unix
Programming Environment Prentice-Hall 1984 ISBN 0-13-937681-X -
Brian W. Kernighan and Dennis M. Ritchie The C Programming Language (2nd Edition) Prentice-Hall 1988
ISBN 0-13-110362-8 -
Bjarne Stroustrup The C++ Programming
Language Addison-Wesley 1991 ISBN 0-201-53992-6 -
W. Richard Stevens Advanced Programming in
the Unix Environment Addison-Wesley 1992 ISBN 0-201-56317-7 -
W. Richard Stevens Unix Network
Programming Prentice-Hall 1990 ISBN 0-13-949876-1
Chapter 3 ���������� ����������������
��� ����� ������� ������ ������� (Murray Stokely).
3.1 �����
��� ����� ��������� ��������� �� ������� ����������� ������������, �������
������������� ������������ ������������� Unix, � ����� ��������� ����� ���������
������������, ���������� ������������� �������� ��������� ������������� ����.
3.2 �����������
����������� ������������
��������� ���������� ���������� ������� ������ ������������ � �����������������
������� �� �����. ���������� ������ �������� �� �������� «���������� ����������», ���
������� ������� ������� �� ������ �������� � ������������, ������������ ����������
����������� ��� ���������� ����� ������� �������. ����� ����������� ��� ������
�������������� ���, ��� ������ ��� �������� ��� ��������� ����� ������, ������� �����
���� ��� ���������� �������.
����� �� ������������� � ����� Unix �������� �������� � ������������� ������������
����� ���������. ���������� ������� �� ������ ������ ����������������� ����� (�� ���� ���
������), �������� �������, �������������� �������������� ��� ������� ���������� �������.
�������� Unix ����������� �� ���������, ��� ��� ���������� �������� ����� ������
����������.
3.3 ������������ ������
������������ ������ ��������� ������ � ��������� ����������� ���-������� 1. ������� ������� ����������� ��� �������� � 1988 ���� ������ �
��������-������ ����� (Moorse). � ���������, ����� ����� �� ����� ����������� � � ����
���. �� 17 ���������� ������������ CERT �� 1999 ���, 10 ���� ��������������� �������
������� � ����������� �����������, ��������� � �������������� ������. �����
���������������� ���� ���� � �������������� ������������ ������ �������� �� ����������
�����.
����� ����������� �������������� ������� ���������� ���� ��� �������� ����������
���������� � ���������� ��������� ����������. ���� �������� ������� ���� LIFO (���������
����� ������ �����) � ������� ����� ������� ������ ��������. ����� ��������� ��������
�������, ��������� ����� «������� �����». ��� ������� ������� �� ����������, ���������� �
�������, � ����� ������������� ���������� ������������ ��������� ����������. «���������
�����» �������� ���������, �������� ������� ��������� ������� �����. ��� ��� ��� ��������
��������� �������� ������ � ���������� ����� �������� �� ������� �����, ������ ����������
����� ��������������� «��������� �������», ������� ���������� ����� ������ �����, ��� ���
��������� ���������� ����� ����� ���������� ������������ ����� ��������. 1 ����� �������� �� ������� ����� ����������� � �����, � ��� ��������
�������� ��������� ������������, ��������� � ������������� �����, ��� ��� ���������������
��������� ���������� � ������� ����� �������� ����� �������� �� ���� �������,
������������ �������� �������������� ��������� ����� ���.
���� ����� � ������������� ����� �������� ������ �����������������, ���� ����� �����
������������ ��� ������ �����, ���������� �� ��������� ������ (malloc/free) ��
«����».
��� � �� ������ ������ ������ ����������������, � C �� ����������� ��������������
�������� ������ � �������� ��� ����������. ����� ����, ����������� ���������� C �����
����� ������� �������.
strcpy (char *dest, const char *src) |
����� ����������� ������� ����� |
strcat (char *dest, const char *src) |
����� ����������� ������� ����� |
getwd (char *buf) |
����� ����������� ����� buf |
gets (char *s) |
����� ����������� ����� s |
[vf]scanf (const char *format, …) |
����� ����������� ���� ���������. |
realpath (char *path, char resolved_path[]) |
����� ����������� ����� path |
[v]sprintf (char *str, const char *format, …) |
����� ����������� ����� str. |
3.3.1 ������ ������������
������
� ��������� ������� ���� ������� ������ ������������ ������, ��������������� ���
���������� ������ �������� � ������ ����������, ��������� ��������������� �� �������
�������. (�� ������� 4)
#include <stdio.h> void manipulate(char *buffer) { char newbuffer[80]; strcpy(newbuffer,buffer); } int main() { char ch,buffer[4096]; int i=0; while ((buffer[i++] = getchar()) != '\n') {}; i=1; manipulate(buffer); i=2; printf("The value of i is : %d\n",i); return 0; }
������� ���������, ��� ����� ��������� ����� ��������, ���� � ���� ��������� ���������
�� ������ 160 ��������.
[XXX figure here!]
��������, ��� ��� ���������� �������� ���������� (�����, ��� exec(/bin/sh)), �����
���� �������� ����� ����������� ����.
3.3.2 ��� �������� ������������
������
����� ������������� �������� �������� ������������ ����� �������� ������������� ������
������ �������������� ������� � ������� ����������� �����. ������� strncpy
� strncat
�������� ������
����������� ���������� C. ��� ������� ����� ���������� �� ����� ���������� ����������
���� �� �������� ������ � �������. ������ � ���� ������� ���� ��������� �������. �� ����
�� ��� �� ����������� ������� ������� NUL, ���� ������ �������� ������ ������, ���
��������. �������� ����� ����� ��-������� ������������ � strncpy � strncat, ��� ��� ���
������������� ����� ���������� � ���������� �������������. ���� ����� � ������������
������ ������������������ �� ��������� � strcpy
���
����������� �������� ������ � ������� �����, ������ ��� strncpy
��������� ��������� NUL ������������ �� ���������
�����.
��� ��������� ���� ������� � OpenBSD ���� ������� ������ ���������� �����������
������. ������� strlcpy
� strlcat
�����������, ��� ��� ��� ������ ����������� �������
������ ������� ��������, ���� �� ����� ������� �������� ��������� �����. ����� ���������
���������� �� ���� ��������� ����� 6. ���������� OpenBSD strlcpy
� strlcat
���� �� FreeBSD
������� � 3.5.
3.3.2.1 ���������������� �������� ������
�� ����� ����������
� ���������, ��� ��� ������ ������������ ����� ������� ����� ����, ������� �����
�������� ������ ��� ������������� ������ ��� ������������� ������� � ��������� ������.
������ ���� ������ �������. ���������� ��������� ���������� � ����������� � �����������
C/C++ ��� ���������� �������� ������ �� ����� ����������.
����� �� ����� ���������� �������� StackGuard, ������� ���������� ��� ��������� ���� �
���������� ���� gcc. �������� ����� StackGuard, http://immunix.org/stackguard.html:
«StackGuard ���������� � �������� ���� �� ����, �� �������� �������� ����� �������� �
�����. ��� ������ ������� StackGuard �������� ����� �� ������� �������� ���������� �����.
���� ����� �������� �� ������� ��� ����������� ����������, �� ���� ������� ���������
����� �� ����, � ��������� �������� �� ��� ���������� ��������� � �������������� �
��������� �������, � ����� ���������� ������.»
«StackGuard ���������� � ���� ���������� ����� � ���������� ���� gcc, � ������
�������� function_prolog() � function_epilog(). function_prolog() ����������������� ���
�������� ������� � ����� ��� ������ ������ �������, � function_epilog() ���������
����������� ������� ��� �������� �� �������. ����� �������, ����� ������� ���������
������ �������� ������������ �� �������� �� �������.»
�������������� ������ ���������� �� StackGuard �������� ����������� ��������
���������� ����������� ���� ������������ ������, �� ��� �� ��������� ��� �������� ��
������.
3.3.2.2 �������� ������ �� �����
���������� � �������������� ���������.
��������� �� ������ ����������� ��������� ���������� ��� ������������ �����������,
������������� � �������� ����, ������� �� �� ������ �����������������. � ���� ���������
������� ��������� ���������� ���������, � ������� ����������� ������������ �������
���������� C (strcpy
, fscanf
,
getwd
, � ��� �����..), �������������� ������������� ������
����� ��������� �����.
-
libsafe
-
libverify
-
libparnoia
� ���������, ��� ������ ����� ��������� ���������� �����������. ��� ���������� �����
�������� ������ ������ ������ ���������� �������, � �� ����� ��������� �������� ��������.
��� ������ ����� �� ���������, ���� ���������� �������������� � ����������
-fomit-frame-pointer. � ���� �� ���������� ��������� LD_PRELOAD � LD_LIBRARY_PATH �����
���� ��������������/����� �������������.
3.4 �������� � ������������� �����
UID
������� �� ������� ���� 6 ��������� ��������������� (ID), ��������� � ����� ������
���������. ������� �� ������ ���� ����� ��������� � ���, ����� ����� ����� ��� ������� �
������ ������ �������. � ���������, ��� seteuid-���������� ������ �������� ����
����������, ��� ������ � ��� �������� �������������.
ID ��������� ������������ ����� ���� ������� ������ ��������� ��������������.
��������� login ������������� ���, ����� ������������ ������ �
�������, � �� ����� ��������.
����������� ID ������������ ��������������� ��������� exec()
, ���� � ��������� ���������� ��� seteuidt. ����������
����� ��������� ����� seteuid()
� ����� ������ ���
��������� ������������ ID ������������ � �������� ��������� ID ������������ ���
������������ set-user-ID. ����� ����������� ID ������������ ��������������� ���������
exec()
, ��� ���������� �������� ����������� � �����������
set-user-ID.
3.5 ����������� ����� ������ �����
���������
����������� ������������ ������� ����������� ������� � �������� �������� �������������
���������� ������ chroot()
. ���� ��������� ����� ������
�������� �������, ������������ �������� ������������ ��� ��������� ���� � ����� ��������
� ���� ����������� ��� ���������. ��� ����, ����� ���� ����� ��� �������� �������,
������� ������ ����� ����� �� ���������� (�����) ��������, � ������� ���� ����. �����
����� ������� �� ������� � ����, ���� �� �� ��������� ����� chdir()
� ����� ����� �����. ������� ����� ��������, ��� �������
����� � ��������� ����� �� chroot-�����, ���� �� ����� ���������� ��������������. ���
����� ���� ���������� ��������� ������ ��������� ��� ������ ������ ����, ������������
��������� � �������� ��� ������ � ������� ������� ���������.
��������� ���������� ������ chroot()
����� ���������
������� �������������� sysctl-����������
kern.chroot_allow_open_directories. ����� ��� ���������� ����������� � 0, chroot()
�� ��������� � ������� EPERM, ���� ���� �����-����
�������� ��������. ���� ��� ����������� � �������� �� ���������, ������ 1, �� chroot()
�� ��������� � ������� EPERM, ���� ���� �����-����
�������� �������� � ������� ��� ���������� ������ chroot()
.
��� ���� ������ �������� �������� ���������� ��������� ����� ��������� �������.
3.5.1 ���������������� ������� (jail) ��
FreeBSD
��������� ������� (Jail) ��������� ����������� chroot()
,
����������� ������ �������������� ��������� ��������� `����������� ��������’. ��� ������
�������� ������ �������, ��� ������� ������������ ������ �������������� ����� ����������
����� IP, � ���� «���������� ������������ root» � ���� ������ �������� ����������.
��� ������ ������ ������, ����� �������� ���� �������������� � ���� ��� ������ ������
suser()
����� ������������ ��������. ������ ���������
������ � suser()
���� �������� �� ����� ��������� suser_xxx()
. ��� ������� �������� �� ����������� � ����������
������� � ������ �������������� ��� ���������, �� ����������� � ������.
������� �������������� ������ ����� ������ ����� �����:
-
�������������� ������������ � �������
setuid
,seteuid
,setgid
,setegid
,setgroups
,setreuid
,setregid
�setlogin
-
������������� ����������� �� ������������� �������� ��� ������
setrlimit
-
�������������� ��������� sysctl-���������� (kern.hostname)
-
chroot()
-
������������� ��������� ����� �� vnode:
chflags
,fchflags
-
������������� ����� �������� vnode, ��� ����� ������� � �����, �������� ��� ���������,
������, ������, ����� ������� � �����������. -
������������ �������� � ������������������ ����� � ������� ������ �������� (����� �
�������� < 1024)
Jail
�������� ����� �������� ������������ ��� �������
���������� � ���������� ���������, �� ���� � ��������� ����������. �� ������� ������ �
������� suser_xxx
�� ������������� ��������� IPC, ��� ���
����� ����������, ��� MySQL, �� ����� �������� � ������. ����� �������������� ����� �����
����� ���� ������ ������, �� ��� ������� ����������, ��� ������ «�����».
3.5.2 ����������� ���������
POSIX.1e
Posix �������� ������� ��������, ������� ��������� ����� �������, ������ ����������
��������, ����� ������������� ����������, ����� ���������� � ������� ����������
��������.
���� �������� ��������� � ������ � ��������� � ������ �������� ������� TrustedBSD. ��������� ���������
���������������� ��� ���� ��������� �� FreeBSD-current (cap_set_proc(3)).
3.6 �������
���������� ������� �� ������ ��������, ��� ����� ������������ ���������. ����
���������� (�� ���� �� ����������): ���� ������������, �������, ���������� �����,
�������, IPC, ������������ � ���� ������, ������� ������� �������� �������, �����������
������, ����� �������� ������ � ������.
������� �� �������, ��� ������� ������������� ��� ����� ������������� �����, �������
����� ���� ������������. ������ ����� ���� ���������� ������ ������������ ����������
����������, ��������� ������ �������� ��������� ��������� ��������� �����, ������� ��
�������� �����������. �������� �������� ������ ���� �������� ������ ��������� ������,
�������� CGI-�������� �� ���-������. ��� ���� ������ ��� ����� ������� ������ ��������
����� («../», «/»), ������������� ������� � ������������ �������� ��������.
� perl ������� ����� ����� �������� ����, ��� «�����������» (taint) �����, �������
����� ������������ ��� ���������� �������� ������������ ������, ����������� ���
���������, �� ���������� ��������. ���� ����� ��������� ��������� ��������� ������,
���������� ���������, ���������� �����������, ���������� ��������� ��������� �������
(readdir()
, readlink()
, getpwxxx()
� ���� �������� ����.
3.7 ����������� ���������
����������� ��������� — ��� ���������� ���������, ��������� �����������������
������������ �� ������������� ������������������ �������. ������� �������, �����������
����������� �����������, ��� ��������� ������� ������ ��������� ����� ������.
��������� �� ������ ���������������� ������ ������������� ����� ������� ��������
�������, �������� ������� � �������� ������. ������� �� ����� ������� ��������
������������ ���������, ��� ��� �� ��������� � ��� ����� ��������� ������ ��������.
�������� ������� �������� access(2)
� ����������� �������
open(2)
��������� �� ��������. ������������ �����
����������� ����� � ���������� ����� ����� ��������. ������ ����� �����������������
���������� ������ ��������� seteuid()
, � ����� �����
������� open()
. � ��� �� ������� ���������� ������ ������
������������� ���� ����� ���� ������� (umask) ����� ������� ������� open()
�� ��������� ������������� ������� chmod()
.
Chapter 4 * Localization — I18N
Chapter 5 ������������ � ���������� � ���������
����
����� ����������� Poul-Henning Kamp <phk@FreeBSD.org>
.
� ���� ����� ����������� ��������� ������������ � ����������, ������� ������
����������� � ������ �������� ������� FreeBSD.
5.1 MAINTAINER � make-������
���� 1996.
���� ��������� ����� ������������ FreeBSD �������������� ��������� ��������� ���
������� �����, ��� ����� �������� �� ���� ����, ������� �������
MAINTAINER= email-addresses
� ����
Makefile
, ��������������� ���� ����� ���������
����.
����� ����� � ���������:
�������������� ������� ����� � �������� �� ����. ��� ��������, ��� �� �����
��������������� �� ����������� ������ � ��������� ��������� � ���������, �������
��������� � ���� ����� ����, � � ������ ������������ �����������, ������� �� �������
����������, �������������� �������� �� ������������ ����� ������.
��������� � ���������, ��� ������� �������� ��������������, ������ ��� ��� �����
�������, ������ ���� ������� ��� �� ������������. ������ ���� �������������� �� ��������
� ������� ���������� �������� ������� ������� �� ��������� �������� �� ����������� �����,
����������� ������ ��������� ��� ������� ���������������. ������ �������������, ����� ��
���������� �������� ��������� �� ������������ ����-���� ���, ���� ��� ������
��������.
������� ��, ������ ��������� �������� ��� ������ ��� ���������������, ���� ��� ��
�������� ��������� ��� ������. � ������ �������, ������������� ��� ������ ���� ����������
���������, ��� ����� ���� � ������ �����.
5.2
����������� ����������� ��������� ��������������title>
����� ������������ Poul-Henning Kamp <phk@FreeBSD.org>
�
David O’Brien <obrien@FreeBSD.org>
.
���� 1996.
��������� ����� ������������ FreeBSD ������� �� ������������ �����������, �������
�������������� ��� ������� FreeBSD. �� ������������ �������� �� �������� �����
����������� ����������� ������������������ (contributed), ��� ������� ������.
��������� ����� ����� ������� ������� perl, gcc � patch.
�� ��������� ��������� ��� ��� ������ � ����� ����������� ������������ ��������������
��������� ������, � ��� ��� ����� ���� ����������� � ����������. ��������� �����������
������ ��� � �� �������.
�� ���� ������� ����� ��������� ������� ��� ������ � ������� «�����������» ���� ��
���� �������, ������� ���������� ��������� � ������� ��� �������������� ������ ����
������������ �����������. ����� ����, ������������ ������������� � �������� �������
��������� ������������ ����������� ����������� ������� ������ �� ���� �����, ��� ��� ��
����� ������������ ������������ ����� ������ �������, ������� ����������� �������
��������� diff-������ ������������ «�����������» ������ �������� ������� ��� ������
(���� �� ������� ������� � cvs). ��� ������ ������ ����� ������� ����� � �������������
��� ������������� ������ ��������� ����������� ������������� ������ ������������
�����������.
� ����� ������, ������, ��� �������� ���, ��� ������ �������� ������. ����
������������� ���� ������ � ���������� ������ �� �������� ��� ������, � ������� ��������
�������, ����� ���� ������� � ���������� ������ � �������� �������� ������� �������������
� ��� ����� ��������� ������ �������������. ����������� ������������� ������ � �������
����� �������� �������� �������� ��� �������� �������.
Note: ��-�� �������� ����������� � ������� ������� ������ RCS � �������������
����� ���������� � CVS, ������, ����������� �/��� ������������� ��������� ������ �� ������������� � ������, �������
��� ��� ������������� � ����� ����������. ��� �������� � «����������� ���������������
������» ��� ����������� � ��������� «�������������» � ���������� ��� ������ � ��������
1.1.x.x. ���� ������ ���������, ��������� ���������� � ���� ������, ����� ���������
������ �������.
� �������� ������� ����, ��� �������� ��� ������, ����� ������������ ������������ ����
���������������� TCL:
������� src/contrib/tcl �������� �������� ������ ������ �
��� ����, � ������� ��� ���������������� ��� �����������. �����, ������� ��������� ��
��������� �� FreeBSD, ����� ���� �������. � ������ Tcl ����������� mac, win � compat ���� ������� ����� ��������� ��������������
������� src/lib/libtcl �������� ������ ���� Makefile «� ����� bmake», ������� ���������� ����������� �������
bsd.lib.mk make-����� ��� ���������� ���������� � ���������
������������.
� �������� src/usr.bin/tclsh ����������� make-����� � �����
bmake, ������� �������� �� ���������� � ��������� ��������� tclsh � ��������� � ��� ���������� ������� ��� ������ �����������
������ �� bsd.prog.mk.
������� src/tools/tools/tcl_bmake �������� ���������
shell-��������, ������� ����� ������ ��� ���������� ������������ ����������� tcl. ��� ��
�������� ������ ����������� � ��������������� ������������ �����������.
����� ����� ��, ��� ������� src/contrib/tcl ���������� �
������������ � ���������: ��������������, ��� �� �������� �������� ������ � ��� ����, �
������� ��� ���������������� (� ��������������� ����� ���������� CVS � ��� ����������
�������� ���� RCS) � ����������� ����� ����������� ���������, ����������� ��� FreeBSD.
������� ‘easy-import’ �� ������ freefall ������� � ��������������, �� ���� ���� ��������
�� ������ ���������� ���� ��������, �� ����������� �������� ������ � �� ���������� �����
� ������� �� ��, ��� «��� ���������». CVS �� ������� ������ �������������� � ���
���������� ����������� ������� ������ ��������� ������������ ������.
��-�� ����� ���������� ����������� ������� ����� ����������� � CVS ���������, �����
«�����������» ����� �� ������������ ���� ������� ��������� � ���������������� ��������
�������, � ����� ��������� ����� ������������ � ����� ����������. ����������� �����
������� �� ������ ����������� � ������, ����������� �� ��������� FreeBSD, � �����
«�����������», ��� ��� ��� �������� � ���������������� ������ ������������� � ��������
�������������� ������� ������, ��� ��� ��������� ���������.
��� ��� ������ ������ �������� �����, ������� �������� ��� ����������� ������������� �
�������, ��������� �� FreeBSD ������������� � �����������, �� ����������� ������� �����
��������������� ������, �� �������������� �������� ��� FreeBSD � ����� ����������
����������� ��������� ������������. �����, ���������� ��������� � ����������� ������ �
���������� � ������, ���������� ��������� ������, ��������� �� ������.
���� ��� ������� ������, �� ����� Makefile � ����� bmake ����� ���� ������������� �� ��������������� ������
������������� ��������� ��������, ���-��, ��� �������� ��� ����� ����������� �� �����
������. ���� ��� ����� �������, �� ����������� ��������� ��� ������� (���� ����������) �
������� src/tools ������ � ����� ������, ����� ��� ����
�������� ������� �������������� �����.
� ������� src/contrib/tcl ������ ���� �������� ���� FREEBSD-upgrade, � ������� ����� ����������� ����� ����:
-
����� ����� ���� ���������
-
��� ��� ���� ������������ ����������� �/��� �� ����� �������� ����������� ����� ��
���������. -
���� �������� ����� ��� ������������� ������
-
��������, ����� ��������� ���������, ����������� ��� FreeBSD.
������, ����������, �� ������������ FREEBSD-upgrade ������ �
��������� �������� ����� ������������ �����������. ������ ����� �� ������ ���������
������� cvs add FREEBSD-upgrade ; cvs ci ����� ���������������
��������������. ���� ������ ������ �������� �� �������� src/contrib/cpio:
This directory contains virgin sources of the original distribution files on a "vendor" branch. Do not, under any circumstances, attempt to upgrade the files in this directory via patches and a cvs commit. New versions or official-patch versions must be imported. Please remember to import with "-ko" to prevent CVS from corrupting any vendor RCS Ids. For the import of GNU cpio 2.4.2, the following files were removed: INSTALL cpio.info mkdir.c Makefile.in cpio.texi mkinstalldirs To upgrade to a newer version of cpio, when it is available: 1. Unpack the new version into an empty directory. [Do not make ANY changes to the files.] 2. Remove the files listed above and any others that don't apply to FreeBSD. 3. Use the command: cvs import -ko -m 'Virgin import of GNU cpio v<version>' \ src/contrib/cpio GNU cpio_<version> For example, to do the import of version 2.4.2, I typed: cvs import -ko -m 'Virgin import of GNU v2.4.2' \ src/contrib/cpio GNU cpio_2_4_2 4. Follow the instructions printed out in step 3 to resolve any conflicts between local FreeBSD changes and the newer version. Do not, under any circumstances, deviate from this procedure. To make local changes to cpio, simply patch and commit to the main branch (aka HEAD). Never make local changes on the GNU branch. All local changes should be submitted to "cpio@gnu.ai.mit.edu" for inclusion in the next vendor release. obrien@FreeBSD.org - 30 March 1997
5.3
������������� �����
������ ����� ���� ���������� �������� ��������� ������������� ��� ��� ���� � ������
�������� ������� FreeBSD. ��������, ���� ���������� ������� �������� � ���� ����������
���������� ��������� ���� ����� ���, ��� ���������� ����������, � �� �� ����� ��������
������� ����� ����, �� ���������, ��� �������� ���� �������� �������������. ��� ���������
������������� ������ � ������ �������� ������� FreeBSD ������� ��������� ����������.
-
����� ����, ���������������� ��� ����������� ���������(�) CPU, �� � ����� ���������
����, �������� �������������. -
����� ���� � ���������, �������������� �����, ��� BSD ��� GNU, ��������
�������������. -
����, ���������� ����������� �������� ������, ������������ ���������� ������������, ��
�������� ��������������, ���� ������ � ���� �� ��������� ������� (1) ��� (2). �� ������
���� �������� � ����������� � ����������� ������� ASCII (������������� ��������� �������
file2c ��� uuencode). -
����� ������������� ���� ������� ������ �������� �� ������� �������� �������
������������� �� ����, ��� �� ����� �������� � ��������� CVS. -
������������� ����� ���������� � ������� src/contrib ��� src/sys/contrib.
-
����� ������ ������ ������ ��������� ������. ��� ������������� ��������� ��, ����
������ ��� ����������� ������������� � �����, �� ���������� �������������. -
��������� ����� ��������� arch/filename.o.uu>.
-
����� ����;
-
������ ������ ����������� � conf/files.* (��� ���������
����������). -
������ ������ �������������� � LINT, �� �������� �������
������������� ������ � ������ ���������� ������, ������ �� ��� ���� �����������������
��� ���. �������, ����� �������� ������� ������������� ����� �������� ���� �������. -
������ � ��������� � ������ ������ �������� ������� ��������
�������.
-
-
����� ������ ������������:
-
�������� �������
������������� ������, ������ �� ��� ����� ������ ���������� ������� make world. -
����� �������
������, ������ �� ��� � �����.
-
5.4 ������������
����������
����� ������������ Satoshi Asami <asami@FreeBSD.org>
,
Peter Wemm <peter@FreeBSD.org>
, � David O’Brien <obrien@FreeBSD.org>
9 ������� 1996.
���� �� ���������� ��������� ������������ ��������� � ����� ��� ������ �����
������������ �����������, ������� ���� ������������ �� ��������, �� ������ ������ ������
����������� �� ������������� ��������. ��� �������, ������������ ������ �� ����� ������
������ � ������� ������ ������������ �����������.
��� ���������� ������������ ���������� ������������ ��� ��������:
-
�������� � 1.0
-
���� ���� ���������, ������� ����� �������� �������������, ����������� ������� �����
������ (��������, ��� ������� ELF ��� ����������) -
���� ���� ���������, �� ����������� �������������, ����������� ������� �����
������
� �������, ���������� ������� � ����������� ������ �������� � ���������� ��������
������ ������, � �������� �������, ��������� ���������� ������ ������� � ���� ��������
��������� �������� � ��������� �������� ������ ������.
�������� ����� ��������� ������ � ����� �������.������� (x.y). ��� ������������ ���������
������� a.out �� ����� ��������� �������� � �������� ������ � ����� x.y.z. ����� ����� ������ ����� y
(�� ���� ������ �����) ��������� ������������ ��� ��������� ������� ������ ������������
��������� ��� ����������� ����, � ����� ����������� ������������ ����������. ���� ����
��� ������������ ����������, ������������ ������ «�����»-������� ������, �� ld.so ����� ������������ ���������� � ���������� �������. �������
�������: ���� �� ���������� � libfoo.so.3.3.3, �� �����������
������� � ���������� ������ 3.3 � ����� ��������� ���������� �
����� �����������, ������������ � libfoo.so.3.(���, ��� >= 3).(���������� ��
����������).
Note: ld.so ������ ����� ������������ ����������
«�������» ������. ����� �������: �� ����� ������������ ������������ libc.so.2.2, � �� libc.so.2.0, ���� ����
��������� ���������� ���� ������������ � libc.so.2.0.
�������� ��� ������������ ����������� ELF ������ �� �������� � �������� ��������.
������ ��� �� ����� ��������� ������� � ������� ����� ������, � ���� ����� Makefile «������� ��� ��� �����» � ����������� �� ����
�������.
��� ��������� �� � ������� ������, ������� ���� ���������� �� ��������� ������ ������
������������ ���������� ������ ���� ��� ����� ��������. ����� ����, ���� ��������������
�� ��������� �������� ������ ������������ ���������� ������ ���� ��� ����� ��������
�������� �� (�������� c 3.0 � 4.0). ����� �� ������� ��������� � ��������� ����������,
������� ������� ���������� ������ ������, ���������� ������� �������� ��������� � �����
Makefile. ��������� �������� �� ��, ��� ������ ����� ���������
� ������� ������ �������� � ���������� ������ ������ ������������ ���������� � ����� Makefile, � ��� ������ ����������� ���������� ����� �� ��
��������.
II. �������������� ����� ����������
- Table of Contents
- 6 * Signals
- 7 * Sockets
- 8 * IPv6 Internals
Chapter 6 * Signals
Signals, pipes, semaphores, message queues, shared memory, ports, sockets, doors
Chapter 7 * Sockets
Chapter 8 * IPv6 Internals
III. ����
Chapter 9 * DMA
Chapter 10 ������� ����
����� ������������ Paul Richards <paul@FreeBSD.org>
�
Jörg Wunsch <joerg@FreeBSD.org>
10.1 ������� ���������
������� ���� ��� ������ gdb
��� ��������� �������� �� ������ � �������� ���� � ���������� ������� ������. ���
�������, ��� ����� ����� ������ ���� �� ��������� ��������, ������������� � ����� /etc/fstab. ����� ������� ������ �� ����������, �� ����������
������������ ��������, ��������, �����, � ������ ������ �� ��������������.
Note: ����������� ������� dumpon(8) ��� ��������
���� �����, ��� ����� ��������� ��������� �����. ����� ��������� �� ������� swapon(8) �������
�������� ������ ���� ������� ��������� dumpon. ������ ���
����������� �������� ���������� dumpdev � ����� rc.conf(5). ����
������ ��� ����������, �� ����� ���� ��� ������ ��������������������� ������������ �����
������������� �������� ��������� savecore(8). ���
�������� ��������� ���� ���� � �������, �������� � ���������� dumpdir ����� rc.conf. �� ���������
��������� ��� ��������� ������ �������� /var/crash.���� �� ������ ������ ���������� ��� ������ ������ ������ ���� ����� �������� dump � ������ config �����������������
����� ������ ����. ����� ������ ������������ �� ������������� � �� ������ ��������������,
������ ���� �� ������ �������� ��������� ������ ������ ����, ������� �������� ���������
���� ������ ��� ��������.
Note: ����� ������ gdb �������� �������� gdb, ���������� � «������ ������� ����». ������� � ���� �����
����������� �������� gdb � ���������� -k. � ������ ������� ���� gdb �������� ��ϣ
����������� �� (kgdb).
Tip: ���� �� ����������� FreeBSD ������ 3 ��� ����� ������, �� ������ ���������
�������� ����������� ���� �������� strip, � �� ������������� ������� ���������� ����:# cp kernel kernel.debug # strip -g kernel���� ��� �� ��� �� � ���������, �� �����������. (�� FreeBSD 4 � ����� ������� �������
���� ��� ����������� ������������� � ����� �������� ���������� ���� make.) ����� ���� �������, ������������� ��� ��� ������ ������ ����,
�� ������ ���������� ��� ������� �������, ������ make
install.��������, ��� � ������ ������� FreeBSD (�� 3.1, �� ������� ���� �����), ������������
���� � ������� a.out, ������� �� ������� �������� ������ ������������� ��������� �
������. � ������� �������� �������� � �� ��������� ���������� ���� ��� �������� �����.
��������� ������ FreeBSD ���������� ���� � ������� ELF, ��� ��� �� ��������
���������.
���� �� ���������� ����� ����, ������, ������� ��� ������ ���� � �����������
����������, �� ��� ����� ��������� � �������� � ������ �����, ����� ����� ��������� �
����������� ����������������, ���������� ��� ������ � �������������������� ������ ���
������ ����� -s, ������������ ��� ��������, � ����� ���������
����� ����:
# fsck -p # mount -a -t ufs # so your filesystem for /var/crash is writable # savecore -N /kernel.panicked /var/crash # exit # ...to multi-user
��� ������������������ ��������� ��������� savecore(8) ��
������������� ������� ���� ��� ���������� ������������� ����. ����� ��� �����
������������ ����, ���������� � ������ ������ �, ������ �����, ������ �� �������, ������
��� ��������� ����� ������ � ������� ���� ����� ����������.
� ������, ����� ������ ���������� �����, ��������� � ������� /sys/compile/WHATEVER � ��������� ������� gdb
-k. �� ��������� gdb �������� ���
���:
symbol-file kernel.debug exec-file /var/crash/kernel.0 core-file /var/crash/vmcore.0
� ����� — �� ������ ���������� ��������� ����, ��������� �������� ������ ���� �����
�����, ��� �� ��� ������� � ����� ������ ����������.
��� ������ ������ ������ ������ gdb, �������������� ���
���������. ������� ������ ���� ��������� ��� ��������� ������������� � ��� ��������
������ ���� �������������. ��� ��������� �������� ������������ ������, �������
������������ �� ����� ������ ��� ��������� ������� pcvt.
1:Script started on Fri Dec 30 23:15:22 1994 2:# cd /sys/compile/URIAH 3:# gdb -k kernel /var/crash/vmcore.1 4:Reading symbol data from /usr/src/sys/compile/URIAH/kernel ...done. 5:IdlePTD 1f3000 6:panic: because you said to! 7:current pcb at 1e3f70 8:Reading in symbols for ../../i386/i386/machdep.c...done. 9:(kgdb) where 10:#0 boot (arghowto=256) (../../i386/i386/machdep.c line 767) 11:#1 0xf0115159 in panic () 12:#2 0xf01955bd in diediedie () (../../i386/i386/machdep.c line 698) 13:#3 0xf010185e in db_fncall () 14:#4 0xf0101586 in db_command (-266509132, -266509516, -267381073) 15:#5 0xf0101711 in db_command_loop () 16:#6 0xf01040a0 in db_trap () 17:#7 0xf0192976 in kdb_trap (12, 0, -272630436, -266743723) 18:#8 0xf019d2eb in trap_fatal (...) 19:#9 0xf019ce60 in trap_pfault (...) 20:#10 0xf019cb2f in trap (...) 21:#11 0xf01932a1 in exception:calltrap () 22:#12 0xf0191503 in cnopen (...) 23:#13 0xf0132c34 in spec_open () 24:#14 0xf012d014 in vn_open () 25:#15 0xf012a183 in open () 26:#16 0xf019d4eb in syscall (...) 27:(kgdb) up 10 28:Reading in symbols for ../../i386/i386/trap.c...done. 29:#10 0xf019cb2f in trap (frame={tf_es = -260440048, tf_ds = 16, tf_\ 30:edi = 3072, tf_esi = -266445372, tf_ebp = -272630356, tf_isp = -27\ 31:2630396, tf_ebx = -266427884, tf_edx = 12, tf_ecx = -266427884, tf\ 32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, tf_eip = -26\ 33:6672343, tf_cs = -266469368, tf_eflags = 66066, tf_esp = 3072, tf_\ 34:ss = -266427884}) (../../i386/i386/trap.c line 283) 35:283 (void) trap_pfault(&frame, FALSE); 36:(kgdb) frame frame->tf_ebp frame->tf_eip 37:Reading in symbols for ../../i386/isa/pcvt/pcvt_drv.c...done. 38:#0 0xf01ae729 in pcopen (dev=3072, flag=3, mode=8192, p=(struct p\ 39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403) 40:403 return ((*linesw[tp->t_line].l_open)(dev, tp)); 41:(kgdb) list 42:398 43:399 tp->t_state |= TS_CARR_ON; 44:400 tp->t_cflag |= CLOCAL; /* cannot be a modem (:-) */ 45:401 46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200) 47:403 return ((*linesw[tp->t_line].l_open)(dev, tp)); 48:404 #else 49:405 return ((*linesw[tp->t_line].l_open)(dev, tp, flag)); 50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */ 51:407 } 52:(kgdb) print tp 53:Reading in symbols for ../../i386/i386/cons.c...done. 54:$1 = (struct tty *) 0x1bae 55:(kgdb) print tp->t_line 56:$2 = 1767990816 57:(kgdb) up 58:#1 0xf0191503 in cnopen (dev=0x00000000, flag=3, mode=8192, p=(st\ 59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c line 126) 60: return ((*cdevsw[major(dev)].d_open)(dev, flag, mode, p)); 61:(kgdb) up 62:#2 0xf0132c34 in spec_open () 63:(kgdb) up 64:#3 0xf012d014 in vn_open () 65:(kgdb) up 66:#4 0xf012a183 in open () 67:(kgdb) up 68:#5 0xf019d4eb in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi =\ 69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_isp = -272629788, tf\ 70:_ebx = 7086, tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \ 71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, tf_esp \ 72:= -272638456, tf_ss = 39}) (../../i386/i386/trap.c line 673) 73:673 error = (*callp->sy_call)(p, args, rval); 74:(kgdb) up 75:Initial frame selected; you cannot go up. 76:(kgdb) quit 77:# exit 78:exit 79: 80:Script done on Fri Dec 30 23:18:04 1994
����������� � ���������������� �������:
- ������ 6:
-
��� ����, ������ ��� ������ DDB (������ ����), ������� ����������� � ����������
�������� ����� ������ ��� «because you said to!» � ����������� ����� �������; ������
����������� �������� �������� � DDB ���� ��������� ��������� ��� ������������� ������
�������� ������. - ������ 20:
-
��� ��������������� �������
trap()
� �����������
�����. - ������ 36:
-
�������������� ������������� ����� ������� �����; ������ ��� �� �����. ��������������,
��� ������� ����� ��������� �� ���������� ������������, ���� � ������ ����������
��������. ����� �� ������ ��������� ���� 403, ����� �������, ��� ������ ��������, ���
���� ������� ������ �� ��������� «tp», ���� ��� ����� �� ������� �������. - ������ 52:
-
������, ��� ������� ���������, �� �� �������� ���������� �������.
- ������ 56:
-
������, ��������, ��� �� ��������� �� �����, ��� ��� �� ����� ���� ������! (��� ���,
��� �� ������ � ���� ������ ����: tp->t_line ������ ���
�������� ������ ������ ����������� ����������, � ��� ������ ���� ���������� ���������
����� �����.)
10.2 ������� ����������
����� � ������� DDD
�������� ����� � ������������ ���������� ����� ���� ��� ������ ������ ������������
���������, ��� ddd (��� ����������� ���������� ���� devel/ddd, ����� ������������ �������� ddd). �������� ���� -k � ��������� ������
ddd, ������� �� ������ ����������� ��� ��� ������. ��������;
# ddd -k /var/crash/kernel.0 /var/crash/vmcore.0
����� ����� � ��� ������ ���������� ������������ ���������� ����� ��� ������
������������ ���������� ddd.
10.3
���������� ������ �����
��� ������, ���� ���� �������� ��������� ������, ���� ����� �� �� ������ � �������
�������� config -g ��� �� �������������? ����� �� �ӣ �ݣ
��������. �� ���������!
�������, ��� ����� �������� �������� ��������� ������. �������� ����, ��� �� ������
��� ����� �������.
��������� � ������� ������������ ���� (/usr/src/sys/arch/conf) � �������������� ��� ���������������� ����.
���������������� (��� ��������, ���� ��� �� ����������) ����� ������:
makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols
����������� ����. ��-�� ��������� ����� ������� � Makefile ����� ����������� �
��������� ������ ��������� �����, ��������, trap.o. �
���������� �������, ���������� ����� -g �� ������� ��� � ��� �
������������ ����, ��� ��� � ����� ������ �� �������� ����� ���� � ��� �� �����, ��� �
������� ����, �� ����������� ������� ���������� ����������. �� ������� ����, �� ������
�������� ������ � ����� ������� ���� �������� size(1). ���� ��� ��
���������, �� ��� �������� ���������� �� ����� �����.
���������� ���� ���, ��� ��� ������� ����. ���������� ���������� ����� �� ������� �
��������� ������, ��� ��� ����� ������ � ����������� ����� ������� ����, ����� ���������
������� ��������� ��� ������� ����� � ������ ����������. ���� ��� ����� ������ ����������
����������, ������� ��������������� ��������� �����, ����� ���������������� ���� �
��������� ����� ������ gdb -k, ���� ��
�������� ���������� ��������� ����������.
�� �������������, ��� �ӣ ��� ����� ��������, ������ � ����������� ������� �ӣ
�������� ���������.
10.4
������� ���� � ������ ��������� ������� � ������� DDB
���� gdb -k �������� ���������� ��
��������� ������� � ��������������� ���������������� �����������, ���� ��������� �����,
������� �� ������� �� ������. ������ ������� �� ��� �������� ����� �������� � ���������
���������� ���� ����.
���� ��� ����� ��������� �������������� ������� ������ ����, �� �� ���� ������ �������
�������� ��������� �������, ������� ���������� DDB. �� ��������� ������������� �����
��������, ��������� ������� ���� �� �����, ����������� � �������� ���������� ���� �
������. ������ �� �� ����� ������������ �������� ������ ���� � ����� ������ ������ �
���������� � ����������� ��������, � �� �� ���� ���������� ����������, ��� � gdb.
����� ����������������� ���� ���� ��� ��������� DDB, �������� ������� � ����������
options DDB
� ��� ���������������� ����, � ����������� ����. (���������� � ����������� �� FreeBSD ��� ���������
������������ � ������������ ���� FreeBSD).
Note: ���� � ��� ���������� ������ ����������� ������, �� ���������� ����������
����� ��������� �� �����������. �������� ����� ��������; ����� ����� ��������� �������
��� DDB �������������.
����� ����, ��� ���� � DDB ��������, ���� ��������� �������� ����� � DDB. ������, �
����� �������, ������ ����������� � ������ ����� �������� -d
����� � ����������� ����������. ���� ����� �������� � ������ ������� � ������ � DDB ��
���������� ��������� ������������� ����� �� �� �� ���� ���������. ������� �� ������
��������� ������� ���� ������� �������������/������������� ���������.
������ �������� �������� ������� � ����� ��������� ����� ����� �������� �������. ����
��� ������� ������� ����� ��������. ���� �� ������ ������� � �������� �� ���������
������, ������ �������� �������:
# sysctl debug.enter_debugger=ddb
����, ���� �� ��������� �� ��������� ��������, ������ ��������������� ������������
����������� ������. �� ��������� ��� �������� � �������� ������������ ���������� Ctrl+Alt+ESC. ��� ��������
syscons ��� ������������������ ����� ���� ��������, � � ��������� ����������������
���������� ��� �������, ��� ��� ����������� �������� ���������� ����������. ���
���������������� �������� ������� ��������, ����������� ������������ ������������������
BREAK �� ������ ������� ��� ����� � DDB (options
BREAK_TO_DEBUGGER � ���������������� ����� ����). �� ��������� ����� �� ��������,
��� ��� ���������� ��������� ���������������� ���������, ������� �������� ����������
������������������ BREAK, � �������, ��� ���������� ������.
������ ������ ����������� �� ����� � DDB ��� ������������� ����� ��������� ��������,
���� ���� ��� ����������. �� ���� ������� �� ����� ���� ��������������� ���� � DDB ���
������, ������� �������� ��� ���������.
������� DDB �������� ��������� ��������� ������� gdb. ������
����� ���, ��������, ����� ������ ����� ��������:
b function-name b address
�������� �� ��������� �������������� � ����������������� ����, �� ����� �������� �� ��
���� ��������; ����������������� �����, ������������ � ���� a-f, ������ ������������ ��������� 0x
(��� ����������� ��� ������ �����). ��������� ������� ���������, ��������: function-name + 0x103.
����� ���������� ������ ����������� ����, ������ ��������:
c
����� �������� ����������� �����, �������:
trace
Note: ��������, ��� ��� ����� � DDB �� ����������� ����������, ���� � ������
������ ����������� ����������, ��� ��� ����������� ����� ����� �� ���� ��� �����
����������.
���� �� ������ ������ ����� ��������, �������
del del address-expression
� ������ �������� ������� ����� ��������� ����� �� �� ���������� ����� ��������, �
������� ����� �������� ����� �������. �� ������ ����� ����� ������� ����� ����� ��������,
������ ��� ����� ����� ������� �� ������ �����; ��� ����� �������� ��:
show b
����� ��������� ���� ��� ����, ����������:
s
��� ���� ����� �������������� ��������� ���������� �������, ������ �� ������
������������ �� � ������� DDB, ���� �� ����� ���������� ������������ �������������
��������:
n
Note: ��� ���������� �� ������� next ��������� gdb; ��� ������ �� ������� gdb finish.
����� �������� �������� � ������, �����������, (� �������):
x/wx 0xf0133fe0,40 x/hd db_symtab_space x/bc termbuf,10 x/s stringbuf
��� ������� � ������ ���� �����/���������/���� � ������ �
�����������������/����������/���������� ����. ����� ����� ������� �������� �������
��������. ����� ������� ��������� 0x10 ��������, ������ �������:
x ,10
�������� �� ������� �����������
x/ia foofunc,10
��� ������������������ � ������ ������ 0x10 ���������� ������� foofunc
������ � �� ������� ������������ ������ foofunc
.
����� �������� �������� � ������, ����������� ������� write:
w/b termbuf 0xa 0xb 0 w/w 0xf0010030 0 0
����������� ������� (b/h/w) ��������� �� ������ ������������ ������, ������ ��������� �� ���
��������� �������� ������� ��� ������, � ���������� ����� ���������������� ��� ������ ���
������ � ��������� ������� ������.
���� ��� ����� ������ ������� ���������� ���������, �����������:
show reg
������������� �� ������ ������� ���������� ������ �������� �� �������, ������,
p $eax
� �������� ��� ��:
set $eax new-value
���� ��� ����� ������� ��������� ������� ���� �� DDB, ������ �������:
call func(arg1, arg2, ...)
����� �������� ������������ ��������.
��� ������ ��������� ���������� �� ���� ���������� ��������� � ����� ������� ps(1) ��������������
����� ��������:
ps
������ �� ������, ������ ���� �������� � �������� � ������ ��������� ������������.
���������, ��� � ����������� �� ������� ���������� ������, �� ��� ����� ���� �����
�������� ���, ��� ���������. ��������� ���� �� ��������� �������� ��� �������� �
������������ ����� �������:
panic
��� �������� � �������� ����� ���� � ������������, ��� ��� ����� �� ������
���������������� ���� �� ����� ������� ������ ��� ������ gdb.
��� �������, ��� ������� ������ ��������� �� ������ �������� continue.
call boot(0)
��� ����� ��������� ������� �������� ��� ����������� �������� ���������� �������,
sync()
��� ���� ������ � ���������� ������������. ����
���������� ����� � �������� ������� � ���� �� ����������, ��� ����� ���� ����� ����������
�������� �������� �������.
call cpu_reset()
��� ��������� �������� ��� ������ � ����������� �� �� �����, ��� ������� �������
������� ������.
���� ��� ����� ������� ���������� �� ��������, ������ ��������:
help
������ ������������ ����������� ���������� ����� �������� ����������� �� ddb(4) ��� ����������
� ������ �������. �������, ��� ������ ������ ���������� ����������� ��� ���������
���������� ����.
10.5
������� ���� � ������ ��������� ������� ��� ������ ���̣����� GDB
��� ����������� �������������� �� FreeBSD ������� � ������ 2.2, � ��� �� ����� ����
����� ������.
� GDB ��� ����� ������� ��������� ���������
�������. ��� �������� ��� ������ ������ �������� ��������� ��
����������������� ������. � ������� �� ������ �������, ��������� ����, ��� ����� ���
��������� ������� ���� �����. ���� �� ��� �������� ������, ��������������� ������� ���
�������, ������� ��� �������� ������ � ����� ���� �� ����� ��������� � ���, � ������
�������� ������� �������, �� ������� �������� �� �� ����� ���� �� ���� (�� ��� ����������
����������).
�� ������ ��������� ����������� ���� ��� ������ ������� config
-g, �������� DDB � ������������ � ��������������� ���
������� �������. ��� ���� ������� �������� ���� ��-�� ���������� ����������. ����������
��� ���� �� ������� ������, ������� ���������� ���������� �������� strip -x � ��������� ��� ���� � �������������� ��������� ��������
-d. ���������� ���������������� ����� ������� ������, �������
������������� ����� «flags 080» �� ��������������� ���������� sio � ������
����������������� ������ ����������� �����. � ������ �� ���������� ������ ��������� �
������� ���������� �������� ���� � ��������� gdb:
% gdb -k kernel GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.16 (i386-unknown-freebsd), Copyright 1996 Free Software Foundation, Inc... (kgdb)
������������������ ����� ��������� ������� (��������������, ��� ������������ ������
���������������� ����) ����� ��������:
(kgdb) target remote /dev/cuaa0
������ �� ������� ����� (���, ������� ������� � DDB ���� �� ������ ��������
����������� ���������) ��������:
Debugger("Boot flags requested debugger") Stopped at Debugger+0x35: movb $0, edata+0x51bc db> gdb
DDB ������� ���������:
Next trap will enter GDB remote protocol mode
������ ���, ����� �� ������ �������� gdb, ����� �����
�������� ����� ��������� GDB � ��������� DDB. ����� ���������� ������� ���������
����������, ������ �������� s (step). ��� ����������� GDB
������� ���������� ��� ������� �����:
Remote debugging using /dev/cuaa0 Debugger (msg=0xf01b0383 "Boot flags requested debugger") at ../../i386/i386/db_interface.c:257 (kgdb)
�� ������ �������� � ���� ������ ����� �����, ��� � � ����� ������ ������ GDB, �������
������ ������ � �������� �������, ������ ��� � ������ gud-mode ������ ���� Emacs (���
���� ��� �������������� ����� ��������� ���� � ������ ���� Emacs) � ���� ��������.
10.6 ������� �����������
������� � ������� GDB
��� ������� ���������� �������� �������, ������� ��������� � ������, ��� ���
������������� GDB � ������ ���������� ������� � ������, ������������ ������������ ������,
��� ����� ������� GDB, ��� �������� ���������� � �������� � ���� �������.
������ ����� ��� ����� ��������� ������ (��� ������) � ���������� ����������
����������:
# cd /sys/modules/linux # make clean; make COPTS=-g
���� �� ����������� GDB � ������ ���������� �������, �� ��� ����������� ����, ���� ���
�������� ������, ������ ��������� ������� kldstat �� �������
������:
# kldstat Id Refs Address Size Name 1 4 0xc0100000 1c1678 kernel 2 1 0xc0a9e000 6000 linprocfs.ko 3 1 0xc0ad7000 2000 warp_saver.ko 4 1 0xc0adc000 11000 linux.ko
���� �� ����������� ��������� ����, ��� ����������� ����������� ������ linker_files ������� � linker_files->tqh_first � ��������� ���������� link.tqe_next �� ��� ���, ���� �� ������� ������ � ��� filename, ������� �� �����. ������� address ���� ������ �������� ������� �������� ������.
����� ��� ����� ���������� �������� ���������� �������� ������:
# objdump --section-headers /sys/modules/linux/linux.ko | grep text 3 .rel.text 000016e0 000038e0 000038e0 000038e0 2**2 10 .text 00007f34 000062d0 000062d0 000062d0 2**2
��, ��� �� �����, �������� ������� .text, � ������� ����
��� ������ 10. ��������� �������� ���� (����� ������ �� �ޣ��) �������� ���������
��������� ������ ������ �����. �������� ��� �������� � ������ ��������, ����� ��������
�����, �� ������� ��� ������ݣ� ��� ������. � ����� ������� �� ������� 0xc0adc000 +
0x62d0 = c0ae22d0. �������������� �������� add-symbol-file � GDB
��� �������� ��������� �� ������:
(kgdb) add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0 add symbol table from file "/sys/modules/linux/linux.ko" at text_addr = 0xc0ae22d0? (y or n) y Reading symbols from /sys/modules/linux/linux.ko...done. (kgdb)
������ �� ������ �������� ������ �� ���� �������� � ������.
10.7 �������
�������� �������
��� ��� ��� ������ DDB ��� ��������� ������� �������, �� � ������ ��������������
������ �������� ������� ��� ���������� ������� �������. �� ������ ��������� ��
������������� ���������������� ������� (���� � ������������� ������������ �������, ����
��� �������� ����� -h � ����������� Boot:) � ���������� ������� �������� � ������� �����������������
�����. DDB �������� � ����� ������������������� ��������� �������, � ��� ����� �
���������������� ��������.
Chapter 11 ���������� ����� ����������
������������ ����
����������� Jörg Wunsch <joerg@FreeBSD.org>
Note: ����� ���, ��� ������ ���� ������, �� ������ ������� �������� �������
����������� � «������������ ����».
11.1 ��� �� ����� �������� ����, � ����� ������?
������������� ���������� ���� � �������� ������� � ������� � «������������ ����» �
����������� FreeBSD. ��� �� ������� �������� «����������» � ���������� «� �����
�����». �������� ����� �������� ����������� ������� ���� �������������� ���������� ����
� ������ �����, ��� ����� ��� ���, ��� ��������� ��������� ������� make depend � �������� ���������� ���� ����� ������� config(8), �������
���������� ������������� �������� ���������������� ��������� � ���������������� ������ ��
�����, ������� ����������. �������� ������� �������� ���������� ��� ������ ����������� config(8), ��� ��� ���
���������� ������, ����� ����� ���� ������.
� ����� ������ �������� ���� �������� �� ����� ��� ����������� ������� ������������� C
��� �������� ���������� ����. ����� ������� ���������� ��������� ������������� �����
����� ���������, ��������������� ����� �������� ������� ���� (��� ����� .h ����) ������ ���� �������� � ������ �� ��������� ����������, ��
���� ����� ��������, ������������ �� ���������, ����� ���� �������������� �����������
������������. ��� ������ �������� �������� ���:
#ifndef THIS_OPTION #define THIS_OPTION (��������� �������� �� ���������) #endif /* THIS_OPTION */
���� �������� �������������, �������� ������ �������� ��� ��������� � �����
���������������� �����, �������� ������������� �������� �� ��������� � �������� ��� �����
���������. ����� ����, ����� �������� ����� ����������� � �������� ��� �� ����� ������
�������������, ��� ��� ��� ������ ���� ���������� ��������� ����� C � ���������
������������� �������� �� ���������.
����� �������� �������� ����������, ������� �� ��������� ������������� ��������, �
������ �������� ��� ��������� ��������� ����� ����, �������� ��� �
#ifdef THAT_OPTION [����� ��� ���] #endif
������� ���������� THAT_OPTION � ���������������� ����� (��
��������� ��� ��� ����) �������� � ��������� ���������������� ����.
��, ��� ������ � ������ C, ����� �������, ��� ��� ����� ��������� ��� «config
option», ��� ��� ���� �� ������� ���� ���� ������� #ifdef…
������ ���� �� ������ ����� ������
options notyet,notdef
� ����� ���������������� ������ � ����� ����������, ������ ���������� ���� ��
��������.
����� �����, ������������� ���������� ���� ��� ���������� ������ ����� �������
������������ �� ������������� � ������ �������� ������� ����. � ������������� �����
���������� � ����� ����� �������
������������ �����, ����� ������ �������� ���������� � ��������� ���� .h � �������� ���������� ����, ������� �� ���������� ���������� opt_foo.h. ����� �������, ����� ����
��������� ������� ����������� � Makefile, � ������� make �����
����������, ��� ����� ����������������� ��� ��������� ������������� ���������.
��������� ��� ������������� ��������� � ������ ����� ����� ���� ������������ ���
��������� ��������� ��� ��� ����������������� ����������, ������� ����� �������� ����
�����: ��� ��� ������ ����� �������� ����� ������ #ifdef �
��������� ���� ����, �� ��� ��� ������������ � �������� ������������ ����. � ����� ������
�������������, ������������ ��������� ����� �������, ����� ��������������� �� ������
������� ����� ��������� (� ����� ����, �� �������������� �������������� ������� ������
����). ��� ������ ������� ���� �������������� ����� ����� ������, ��������� config(8) �����
�������� �������������� � �� �������������� �����, ����������� � ���������������� �����,
������ ��� ����� �������� �� � ���� Makefile ����.
11.2 � ��� � ������ ��� �����
�������?
��-������, �������������� ���� sys/conf/options (��� sys/<arch>/conf/options.<arch>, �������� sys/i386/conf/options.i386), � �������� ���� opt_foo.h, � ������� ����� �����
��������� ���� ����� �����.
���� ������� ���-��, ��� ������� �� �������������� ����� �����, �������� ���.
��������, �����, ���������� ����� ��������� ���������� SCSI, ����� ���� �������� � opt_scsi.h. �� ��������� ������� ���������� ����� � ���������������
����� �����, ������, FOO, �������� � ����, ��� �� ��������
���������� � ��������������� ���� opt_foo.h. ��� ����� ����
�������������� � ������ ����� ������� ��������� ������� ����� �����.
���� ����� opt_foo.h ���
�������������� ����� ����� ��� ���, ���������� ����� ���. �������� ��� �������� �
���������������� ����� ������ � ����� options[.<arch>]. ������� config(8)
������������� ��������� ��������� � ������� ���� ���� ��� ��������� ����� �������.
����������� ����� ������ ��������� � ������������ �����..
���������� ������� �������� ���������� ����� � ����� ����� opt_foo.h �������� � ������������
������� �������� ���������� ������ ���� ��� ��������� ����� �� ����� � ����������������
�����.
�������, ����������, ����� ����� ���� ������� �� ����� �����. ���� ������ �� �� ������
��� ��������� ���� ����� � ��� ��� ����� �� �����������, �� �������
% find /usr/src/sys -type f | xargs fgrep NEW_OPTION
��� ������� �� �����. �������� ��� � �������������� ��� ��� �����, � ����� ��������
#include "opt_foo.h"
������ �� ���� ����� #include <xxx.h>. ��� ������������������ ����� �����, ��� ���
����� ����� �������������� �������� �� ��������� �� ������� ���������� ������, ���� ���
�������� �� ��������� ������ � �����
#ifndef NEW_OPTION #define NEW_OPTION (���-��) #endif
� ������� ���������.
���������� �����, ������� �������������� ���-�� � ��������� ������������ ����� (��
���� �����, ����������� � �������� /usr/include/sys/),
����������� ������ ��������. opt_foo.h �� ����� ���� ������� � �� �����, ������ ��� ���
������� ��������� ����� ��������, �� ���� �� �� �������, �� � ������ ��� ��������� �����
���������� ������������������ �������� ��� ���� �����. ��, ����� ���������� ����� ����� �
������, �� ��� �� �� �����������.
Chapter 12 * UFS
UFS, FFS, Ext2FS, JFS, inodes, buffer cache, labeling, locking, metadata,
soft-updates, LFS, portalfs, procfs, vnodes, memory sharing, memory objects, TLBs,
caching
Chapter 13 * AFS
AFS, NFS, SANs etc
Chapter 14 * Syscons
Syscons, tty, PCVT, serial console, screen savers, etc.
Chapter 15 * ������ �������������
IV. ���������� ���������
- Table of Contents
- 16 * x86 Assembly Language Programming
- 17 * Alpha
Chapter 16 * x86 Assembly Language Programming
Chapter 17 * Alpha
�������� ������ ������������, ��� �� ���������� � ��� ������������.
������ ������������� ���� ��� FreeBSD/alpha.
V. ����������
- Table of Contents
- Bibliography
Bibliography
[1] Dave A Patterson and John L
Hennessy, 1998, 1-55860-428-6, Morgan Kaufmann Publishers, Inc., Computer
Organization and Design: The Hardware / Software Interface, 1-2.
[2] W. Richard Stevens, 1993, 0-201-56317-7, Addison
Wesley Longman, Inc., Advanced Programming in the Unix Environment, 1-2.
[3] Marshall Kirk McKusick, Keith Bostic, Michael J Karels, and John S Quarterman, 1996, 0-201-54979-4, Addison-Wesley
Publishing Company, Inc., The Design and Implementation of the 4.4 BSD Operating
System, 1-2.
[4] Aleph One, Phrack 49; «Smashing the Stack for
Fun and Profit».
[5] Chrispin Cowan, Calton
Pu, and Dave Maier, StackGuard; Automatic Adaptive
Detection and Prevention of Buffer-Overflow Attacks.
[6] Todd Miller and Theo de
Raadt, strlcpy and strlcat — consistent, safe string copy and
concatenation..
|
|||||||||||
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее… |
Yoghurt
Гость
-
#1
В этой теме собираются книги на русском языке по операционной системе FreeBSD и только по ней.
Выкладываю те книги, что есть у меня:
FreeBSD. Установка, настройка, использование
Линк: _http://urna.org/freebsd-books/freebsd_ustanovka_nastrojka_ispolzovanie.rar
Размер: 107,97 Мб
Формат: PDF
Полный справочник по FreeBSD
Линк: _http://urna.org/freebsd-books/polnyj_spravochnik_po_freebsd.rar
Размер: 124,03 Мб
Формат: PDF
FreeBSD. Энциклопедия пользователя
Линк: _http://urna.org/freebsd-books/freebsd_enciklopedia_polzovalelja.rar
Размер: 129,18 Мб
Формат: PDF
Последнее редактирование модератором:
smair
Гость
-
#8
jonjonson,
Если вещь нужна, то на размер не смотришь. Знакомый на модеме исошники линукса тягает — и ничего -три -четыре -пять ночей на образ
Последнее редактирование модератором: