|
|
This article is available in: Arabic |
������ Lorne Bailey <sherm_pbody(at)yahoo.com> ���� �� ������: Lorne���� �� ������ � ���� ������� ����� �� Oracle � ���� ����� ���������. ����� ��� �������: yacine laalaoui <yacine.laalaoui(at)caramail.com> ������:
|
���� ������:
��� ������ ����� ��� ������� ��� ������� C � �����
������� ������compilerGCC� ��� ��� ��� ���� ������ ������ ��
���� ������ ���� ��� ����� ������� ���� ���� C � ��� ���
���� �� ���� ����� � ��� ������ ������ ����� �����ߡ � ���� ���� ���� ��� �����
-debugger-
�� ������ �� ����� ����� ����� ��� ����� �� ���� ���ޡ ���� ��տ � ��� ���� ��� �� ���� �� ������� �����п �� ����� ��� ������ �����back door �� ���� ������ Trojan. ����� Ken Thompso ��� ���� ������ ��� ����� ���� ���� ������ �� ������ ������ 'login'� � ���� ���� ������ ����� ���� ������ ����. ���� ���� �� .
���� ���� ����� GCC� �����
���� configure; make; make install ��� gcc ����
��� ��� ������. ��� ���� gcc
���� �����ߡ ����� ������ ������ ���� ����� ���� ����� ����� ����� �����ݡ �����
�� �� �������� �� �� ����� ������� ��� ����� ������ ���� ������С �
���� ������� ���� ������ ������ ���� C � ����� ��������
��������� �� ����� gcc� ��� ������� �� ������� ������
gcc -E
Pre-compile �� �������Compile
gcc �� ������� as Assembly �� ����� Link ld
.
���� ������ ����� �����ݡ ��� ���� �������� ���� ���� ��� ������ ������.
#include <stdio.h> int main()
{ printf("Hello World!\n"); }
����� ���� game.c �� ����� ��:
gcc game.c
������ ���� ������� ����� ����� ������� a.out ����� ������ ������ :
a.out Hello World���� ����� ������� ���� ��� a.out ���� ������� �������. ��� ���� ����� �������� ������ ������� ���� ��� ���� ����� ��������� ���� ����� ������ -o ����� ���� ����� ������ � ����� game ����. ��� �� ���� ������� �� ���� ����� �����.
gcc -o game game.c
game Hello World
����� �� �������� ���� ����� � ����� �� �� ��ɡ ���� ��� �������� ���� ���� ����ǡ ����� �� ���� �� ���� ������� ����� ��� ������ ������ � ������ �� ���� ���� �����. ���� ��� �����.
����� ����� ���� ����� ����� ����� ��������� � ��������� � ������� � �� ������ �� �����
#ifndef DECK_H #define DECK_H #define DECKSIZE 52 typedef struct deck_t { int card[DECKSIZE]; /* number of cards used */ int dealt; }deck_t; #endif /* DECK_H */
���� ��� ����� ���� deck.h� ��� ��� ���� ���
game.c � ����� �� ����� ������
"include "deck.h� �� ����� ������ ��� deck_t
deck;� �� ����� ����ɡ ���� ���� ����� ����� � ��� �������.
gcc -o game game.c
��� ����� ������ ��� ���
deck_t� �� ����� ������� ������ ���� ������ �����
"deck.h"��
�����
game.c ���� �������� ���� ��� #.
��� ������� ������ ��������
-E �� ��� gcc .
gcc -E -o game_precompile.txt game.c wc -l game_precompile.txt 3199 game_precompile.txt���� �� ����� game_precompile.txt ������ �� ������� ������ ��� 3200 ���� ���� ������ �� ����� stdio.h .
����� ������� ������ ���� �������� :
����� ������� ����� �� ������� ���� �� ��� DECKSIZE ������ ��� ����� ����ȡ �� ���� ���� �������̡ ���� �� ����� ���� ������ ����� �� ���� ������ ����� ������� ������.��� ������� �� ���� ����ǡ �� ���� ������� ���� �������.
���� ������ ������ ��� ��� ������� assembly� � ��� ��� ����� �� ���� ����� ����� �� ������� ��������. ��� ������� ����� ��� � ���� �� ��� ��� ����� ��������.
����� �������� �� ��� ������ assembly code ��� ��� ���� object code. ����� ������ �� ���� ������ ���� ����� ������ ������ -c ���� ����� ��� ��� ���� ������ .o
gcc -c game.c����� ��� �����ǡ � ���� ���� ���� function ���� ������� ������� �� ������ 'drawn' ���� ���� ����� �������.
#include <stdlib.h> #include <stdio.h> #include <time.h> #include "deck.h" static time_t seed = 0; void shuffle(deck_t *pdeck) { /* Keeps track of what numbers have been used */ int drawn[DECKSIZE] = {0}; int i; /* One time initialization of rand */ if(0 == seed) { seed = time(NULL); srand(seed); } for(i = 0; i < DECKSIZE; i++) { int value = -1; do { value = rand() % DECKSIZE; } while(drawn[value] != 0); /* mark value as used */ drawn[value] = 1; /* debug statement */ printf("%i\n", value); pdeck->card[i] = value; } pdeck->dealt = 0; return; }
���� ����� ���� shuffle.c� ���� �� ���� ����� ������� � ������ ����� ������� printf ����� �� ���� �� �������ǡ ��� ������ ������ ���� ����� ( ��� ���� ����= debbuge) � ���� ������ ��� �����.
���� ����� �����:��� �����
gcc -c shuffle.c���� ���� ��� ����� shuffle.o �� �� ����� ����� �� shuffle.c . ��� ����� game.c � ��� ��� ����� ������ ���� ��� ����� ������� deck ���� �����:
shuffle(&deck);
��� ��� �������� ������ ������С ����� ��������� �� �����
gcc -o game game.c /tmp/ccmiHnJX.o: In function `main': /tmp/ccmiHnJX.o(.text+0xf): undefined reference to `shuffle' collect2: ld returned 1 exit status
��� ����� �� ����ء �� ��� �������� ����� ������� ������ :
gcc -o game game.o shuffle.o�� ���� ������� ������� ��� ������ ���� �������. �� ������ ������� ������� shuffle.o � game.o ������ ���� ��� ��������� �������� �� ������� ������� ��� �� ����� �� ����� ������� main ��� shuffle �� deck.h �� printf �� stdio.h .
������ -Wall ���� �� ������� � ��������� �� ������� ��� ����� ������ ���
������� ���� ����� ��� �������� ��� �� :
game.c:9: warning: implicit declaration of function `shuffle'
void shuffle(deck_t *pdeck);
���� ��� ������ ������ ���� �������� ������ ������� ( ���� ���� optimization) �� ������ -#O ��� -O2 ���� ���� �������� ���ڡ �� ����� ���ǡ ��� ������� ������� ��� ���� ���� ��� ������ǡ ����� 2 �� ���� ���� ����� �������..
�������� ���� ���ǡ � ������ ��� ������ ��
game | sort - n | less��� �� ����� ���� �� �� ��� ���ߡ ��� ������ ����� �������� �������� ��������
����� ���� �������� ����� �������� ( ���� �����) ��� gdb ��� ��� ������� �� KDbg ��� ������� ��������. ��� ������� Kdbg ���� �������� ������ ������� �� ������� file->executable � �� ���� F5 �� ���� ������� File->Run ���� ������� �� ����� ��� ��� � � ��� ���� ����� ������� ������ :
gcc -g -c shuffle.c game.c gcc -g -o game game.o shuffle.o
����� ��� ��� ��� ��� ���� ����� ������� Kdbg � gdb �������� ������� � �� ����� ���ߡ � ����� ����� ���� ������ ������С ��� ���� ��� ������ ������ ��� ����� ���� �� ������ shuffle ����� �� ���� ����� ����� ��� ��� ����ѡ ���� ���� F5 ������ ������� ��� ��� ������ �����ʡ � ������ ��� F8 ����� �� ���� ���� ������ shuffle� � ��� ���� ���� ������ ��� ����� �� ��� ����� �������.
����� ��� ������ ��� ����� ����� ������ C � ���� ����� ��� ����� ������� �� gcc . ������ ������ ���� � ���� ���� ����� ����� ( ��������)� ��� ���� ��� ���� �� ������ ���� ������� ���� C � ������� ������ gcc � ����� ��� Kdbg � gdb.
� ���� ���� ����� ���� ��������� ������ man � ��� ������� info ��� ������ gcc �� ld.
|
������� ������ ���� ����� �����
© Lorne Bailey, FDL LinuxFocus.org ���� ��� ������� �� ��� �� ������ �������� ��� ����� ����� |
������� �� �������:
|
2002-05-09, generated by lfparser version 2.27