[LinuxFocus-icon]
������  |  �������  |  ����  |  ���

����� | ������� | ����� | �� ������
This article is available in: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Portugues  Russian  Turkce  Arabic  

[Lorne Bailey]
������ Lorne Bailey
<sherm_pbody(at)yahoo.com>

���� �� ������:

Lorne���� �� ������ � ���� ������� ����� �� Oracle � ���� ����� ���������.



����� ��� �������:
yacine laalaoui <yacine.laalaoui(at)caramail.com>

������:

 

GCC - �����

[Illustration]

���� ������:

��� ������ ����� ��� ������� ��� ������� C � ����� ������� ������compilerGCC� ��� ��� ��� ���� ������ ������ �� ���� ������ ���� ��� ����� ������� ���� ���� C � ��� ��� ���� �� ���� ����� � ��� ������ ������ ����� �����ߡ � ���� ���� ���� ��� ����� -debugger-

 

 ï¿½ï¿½ï¿½ï¿½ï¿½  GCC

�� ������ �� �����  ����� ����� ��� �����   ��  ���� ���ޡ ���� ��տ �  ��� ���� ��� �� ���� ��  ������� �����п �� ����� ��� ������ �����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 .

 ï¿½ï¿½ï¿½ï¿½ï¿½ ������� ������ ���� �������� :   

  1. ��� ������� ������� �� #include . �� ��� ������.
  2. ����� ������� ������� �� #define ������ �������.
  3. ������� ��������� ������� macro �� �������.
 

����� ������� ����� �� ������� ���� �� ��� 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) � ���� ������ ��� �����.

���� ����� �����:
  1. ������� ( parameters) ���� (pass) �� ������ �������(by value)� �� �������� (by address)  ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½  "&" . ������ ����� ������� ���� ������ ������ ����� ����ǡ ���� ������� ��������� �������global variables� ��� ������ �� �� ������ ��� ����ǡ � ���� �� �������� ��� �����  ���� �� C ��� ���� ����� ����.
  2. ����� ���� ������� �� ������ ���� ������ ���� main � ������ shuffle.c �� ���� ������ ������� �� ��� ���.

��� �����

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'
���� ������ �� ����� ����� ������ shuffle �� ����� ������ deck.h  ���� :
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
���� ��� ���� ���� ������̡ � ��� ����� ��� gdb  ï¿½ï¿½ï¿½ï¿½ ���� ��� ��� �������.

����� ��� ��� ��� ��� ���� ����� ������� Kdbg � gdb �������� ������� � �� ����� ���ߡ � ����� ����� ���� ������ ������С ��� ���� ��� ������ ������ ��� �����  ���� �� ������ shuffle ����� �� ���� ����� ����� ��� ��� ����ѡ ���� ���� F5 ������ ������� ��� ��� ������ �����ʡ � ������ ��� F8 ����� �� ���� ���� ������ shuffle� � ��� ���� ���� ������ ��� ����� �� ��� ����� �������.

 

�������

����� ��� ������ ��� ����� �����  ������ C � ����  ����� ��� ����� ������� �� gcc .  ������ ������ ���� � ���� ���� ����� ����� (  ��������)� ��� ���� ��� ���� �� ������ ���� ������� ���� C � ������� ������ gcc  � �����  ��� Kdbg � gdb.

� ���� ���� ����� ���� ��������� ������ man � ��� ������� info ��� ������ gcc �� ld.

 

�������

 

������ ��� ��� ������

��� ���� ���� ���� ���������ʡ ���� ������ �� ���� ��� ������� �������.
 ï¿½ï¿½ï¿½ï¿½ ��������� 

������� ������ ���� ����� �����
© Lorne Bailey, FDL
LinuxFocus.org

���� ��� ������� �� ��� �� ������ �������� ��� ����� �����
������� �� �������:
en --> -- : Lorne Bailey <sherm_pbody(at)yahoo.com>
en --> ar: yacine laalaoui <yacine.laalaoui(at)caramail.com>

2002-05-09, generated by lfparser version 2.27