Fabrice HARROUET - Ressources diverses

Quelques exposés.

Quelques astuces.

Quelques programmes ``maison'' à vocation essentiellement pédagogique pour montrer la faisabilité de quelques points techniques. Il ne s'agit en aucun cas d'outils utilisables dans un contexte ``sérieux'' ; à utiliser avec beaucoup de précautions...



Exposé : Multiprocesseurs, multicœurs et parallélisme

Rassemblement de quelques renseignements et de quelques expériences autour des processeurs multicœurs.

Notions introductives, pas de contenu technique pointu.

Le fichier PDF


FiMoN : écoute d'un réseau

Fingers In the Middle Of the Nose ...
(man-in-the-middle with the fingers-in-the-nose)

Ce programme permet d'écouter le trafic de plusieurs postes derrière un switch par ARP-poisoning.

Il propose des facilités de redirection de trafic (notamment vers le programme Bounce) afin d'en faciliter la capture et d'expérimenter la démarche man-in-the-middle.

FiMoN - l'archive


Bounce : capture du trafic réseau

Ce programme permet de rediriger un trafic UDP/TCP/SSL vers sa destination en en capturant le contenu.

Il propose ainsi, conjointement avec le programme FiMoN, d'expérimenter la démarche man-in-the-middle.

Bounce - l'archive


IcmpTerm : contrôle d'un terminal via ICMP

Ce programme illustre de manière très simple comment on peut contrôler un terminal à l'intérieur d'un réseau depuis l'extérieur en se dissimulant dans un trafic ICMP.

IcmpTerm - le script


color_cc : colorize compiler messages

This Python script is invoked as a compiler and colorizes the messages generated by your system compiler. The main purpose is inspired from the no longer maintained colorgcc Perl script but this Python script goes a bit further.

Supported compilers are
  gcc, g++, icc and icpc under UNIX
  cl.exe and icl.exe under Window$

For an explicit usage, simply do:
  color_cc.py mycompiler options ...

For an implicit usage under UNIX:
  ln -s color_cc.py mycompiler
You must ensure this symlink is found in your PATH before the true compiler executable, so that invoking
  mycompiler options ...
executes this Python script.

There is no implicit usage under Window$ since there are no symlinks :-(
A workaround consists in renaming this script as mycompiler.py.
Then invoking
  mycompiler.py options ...
will look for mycompiler.exe and colorize its messages.

color_cc - le script


Intel C++ compiler 11.0 under FreeBSD 7.1

Obtain Intel C++ compiler 11.0 for linux (l_cproc_p_11.0.074_ia32.tgz) and its license (NCOM_L_CMP_CPP_*.lic) from Intel website.

Extract RPM files :

for i in intel*.rpm ; do
  echo $i
  rpm2cpio $i | ( cd / ; cpio -idv  )
done
        

Install license file :

mkdir /opt/intel/licenses
cp NCOM_L_CMP_CPP_*.lic /opt/intel/licenses
        

Adjust shell scripts :

ln -s /usr/local/bin/bash /bin

INSTALLDIR=/opt/intel/Compiler/11.0/074
for i in `find ${INSTALLDIR} -type f -print` ; do
  if ! grep -q -i '<INSTALLDIR>' $i ; then continue ; fi
  echo $i
  tmp=`mktemp /tmp/intel.XXXXXX`
  cp $i $tmp
  cat $tmp | sed -e s%"<INSTALLDIR>"%"${INSTALLDIR}"%g \
                 -e s%"<installdir>"%"${INSTALLDIR}"%g > $i
  rm $tmp
done
        

Enable linux compatibility (see FreeBSD documentation) and install g++ for linux (taken from Slackware 12.2 here) :

gzip -cd gcc-g++-4.2.4-i486-1.tgz | ( cd /compat/linux ; tar xvf - )
        

Adjust compiler scripts :

cat << "EOF" >> ${INSTALLDIR}/bin/ia32/iccvars_ia32.sh
export GXX_ROOT=/compat/linux/usr/libexec/gcc/i486-slackware-linux/4.2.4/
# export LC_ALL=C
EOF

cat << "EOF" | tee -a ${INSTALLDIR}/bin/ia32/icc.cfg \
                   >> ${INSTALLDIR}/bin/ia32/icpc.cfg
-U__linux
-U__linux__
-U__gnu_linux__
-Ulinux
-D__FreeBSD__
-Qlocation,link,/opt/intel
EOF

cat << "EOF" > /opt/intel/ld
#!/usr/bin/env python
import os,sys
# sys.stderr.write('BEFORE LD %s\n' % sys.argv)
dyn=True
args=['/usr/bin/ld']
for i in sys.argv[1:]:
  if i=='elf_i386':             
    args.append('elf_i386_fbsd')
  elif i=='/lib/ld-linux.so.2': 
    args.append('/libexec/ld-elf.so.1')
  elif i=='-Bdynamic':          
    dyn=True 
    args.append(i)
  elif i=='-Bstatic':
    dyn=False 
    args.append(i)
  elif i in ['-ldl','-lirc','-lintlc']: 
    pass
  elif i in ['-limf','-lsvml','-lcxaguard']:
    if dyn:
      args.append('-Bstatic') 
      args.append(i) 
      args.append('-Bdynamic')
    else:
      args.append(i)
  else: 
      args.append(i)
# sys.stderr.write('AFTER LD %s\n' % args)
os.execvp(args[0],args)
EOF
chmod +x /opt/intel/ld
        
Intel downloads
FreeBSD linux compatibility


PoorOS : ébauche d'un système d'exploitation

Il s'agit d'un exemple sans prétention qui a juste pour ambition l'illustration de quelques points nécessaires à la réalisation d'un système d'exploitation (le choix du nom est d'ailleurs assez évocateur : Poor OS ;^)

Dans l'idée d'une démarche pédagogique, ce travail est présenté sous la forme d'un tutoriel en cinq étapes, la dernière étant un embryon de système multitâche écrit en C++ (avec un peu d'assembleur). Un fichier d'explications (rédigé à une heure tardive) est présent dans l'archive mais il n'est malheureusement pas complet ; des explications de vive voix sont encore nécessaires pour certains points délicats.

Les outils nécessaires pour faire fonctionner les exemples sont :

  • le langage d'assemblage NASM,
  • l'environnement de développement gcc/g++,
  • l'émulateur QEMU (ou similaire) pour éviter d'avoir à démarrer une vraie machine à chaque essai.

nb: bien que l'utilisation de l'assembleur soit ici indispensable, la vocation de ces exemples n'est pas l'enseignement de ce langage ni même des principes généraux de fonctionnement des processeurs (qui sont censés être connus).

PoorOS - l'archive