|
|
| This document is available in: English Castellano ChineseGB Deutsch Francais Italiano Portugues Russian Turkce 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