diff --git a/.gitignore b/.gitignore index 29247d5..83c3913 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ public/ *.bin +*.so diff --git a/README.md b/README.md index 2e1e90c..c76937c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Notes de cours et TD machines ----------------------------- -Dépôt git pour la construction d'un sitre statique avec +Dépôt git pour la construction d'un site statique avec [Hugo](https://gohugo.io) reprenant l'ensemble de mes notres de cours et TM machine mises au propre (J'ai beaucoup de retard...) @@ -12,8 +12,8 @@ Je rajouterai plus tard un `makefile` pour la construction de fichiers PDF avec ### Installer le thème -Pour que la construction du site fonctionne, il faut installer le thème visuer -choisi (ici er). Il est présent sous la forme d'un `submodule` git au'il faut +Pour que la construction du site fonctionne, il faut installer le thème +mainroad. Il est présent sous la forme d'un `submodule` git qu'il faut initialiser (dans le répertoire racine du dépôt). ```shell @@ -36,16 +36,10 @@ $ hugo server -D --disableFastRender -v ``` Il est possible de rajouter l'option `--debug` afin d'afficher plus -d'information sur la sortie standard. Une fois ce mode activé, il suffit -d'ouvrir son navigateur er d'aller à l'adresse *http://localhost:1313*. - -## Site en ligne - -Le site n'est pas encore accessible en ligne, un jour peut-être... +d'informations sur la sortie standard. Une fois ce mode activé, il suffit +d'ouvrir son navigateur à l'adresse *http://localhost:1313*. ## Bugs C'est la première fois que j'utilise un générateur de site statique, le -focntionnement du site n'est donc pas optimal. Les pages **tags** et -**catégories** ne fonctionnent pas (pages blanches) pour une raison encore -mystérieuse. +fonctionnement du site n'est donc pas optimal diff --git a/content/progsys/TDM_9-les_librairies/index.md b/content/progsys/TDM_9-les_librairies/index.md new file mode 100644 index 0000000..b4430c6 --- /dev/null +++ b/content/progsys/TDM_9-les_librairies/index.md @@ -0,0 +1,63 @@ +--- +title: "TDM : les librairies" +date: 2018-11-16 +categories: ["Programmation système", "TD machine"] +--- + +Le but de ce TD est de détourner la commande `uname` en réécrivant la fonction +`uname()` dans une librairie partagée et de charger celle-ci grâce à un +`LD_PRELOAD` + +Pour afficher de information sur la la fonction `uname`, il suffit de faire un +`man 2 uname` + +## code de ma fonction de remplacement + +```c +#include +#include + +int uname(struct utsname *buf) +{ + + strcpy(buf->sysname,"Windows GNU/LINUX"); + strcpy(buf->nodename, ""); + strcpy(buf->release, "10.0.0.1"); + strcpy(buf->version, "10.2"); + strcpy(buf->machine, "Shittycorp processors inc."); + + return 1; +} +``` + +Il faut charger les entêtes `sys/utsname.h` (définition de la structure de +donnée `utsname`) et `string.h` (pour l'utilisation de `strcpy()` + +Cette dernière est nécessaire pour manipuler les chaines de caractères avec le +pointer `*buf` vers la structure de données `utsname`. + +## compilation et exécution + +la compilation de la librairie se fait donc avec `gcc` et les arguments `-fPIC` +et `-shared`: + +```shell +gcc -Wall -fPIC -shared ./src/libuname.c -o src/libuname.so +``` + +Comme indiqué en cours, il suffit d'exécuter le programme `uname` en +préchargeant notre librairie : + +```shell +LD_PRELOAD=./libuname.so uname +``` + +*Attention*, il fait bien indiqué le répertoire dans lequel se trouve la +librairie dans le `LD_PRELOAD`, même si elle se situe dans le répertoire +courant. Ici j'ai bien spécifié `./libuname.so`, en ne mettant que `libuname.so` +dans le `./` le chargement de la librairie ne fonctionne pas : + +```shell +LD_PRELOAD=libuname.so uname +ERROR: ld.so: object 'libuname.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored. Linux +``` diff --git a/content/progsys/TDM_9-les_librairies/src/libuname.c b/content/progsys/TDM_9-les_librairies/src/libuname.c new file mode 100644 index 0000000..e09fa88 --- /dev/null +++ b/content/progsys/TDM_9-les_librairies/src/libuname.c @@ -0,0 +1,14 @@ +#include +#include + +int uname(struct utsname *buf) +{ + + strcpy(buf->sysname,"Windows GNU/LINUX"); + strcpy(buf->nodename, ""); + strcpy(buf->release, "10.0.0.1"); + strcpy(buf->version, "10.2"); + strcpy(buf->machine, "Shittycorp processors inc."); + + return 1; +}