Compare commits

...

2 commits

Author SHA1 Message Date
c027416fd5 Add shared libraries TDM 2018-11-16 10:52:10 +01:00
455d9dcd79 Syntax corrections 2018-11-07 18:09:09 +01:00
4 changed files with 84 additions and 12 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
public/ public/
*.bin *.bin
*.so

View file

@ -1,7 +1,7 @@
Notes de cours et TD machines 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 [Hugo](https://gohugo.io) reprenant l'ensemble de mes notres de cours et TM
machine mises au propre (J'ai beaucoup de retard...) 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 ### Installer le thème
Pour que la construction du site fonctionne, il faut installer le thème visuer Pour que la construction du site fonctionne, il faut installer le thème
choisi (ici er). Il est présent sous la forme d'un `submodule` git au'il faut 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). initialiser (dans le répertoire racine du dépôt).
```shell ```shell
@ -36,16 +36,10 @@ $ hugo server -D --disableFastRender -v
``` ```
Il est possible de rajouter l'option `--debug` afin d'afficher plus 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'informations sur la sortie standard. Une fois ce mode activé, il suffit
d'ouvrir son navigateur er d'aller à l'adresse *http://localhost:1313*. d'ouvrir son navigateur à l'adresse *http://localhost:1313*.
## Site en ligne
Le site n'est pas encore accessible en ligne, un jour peut-être...
## Bugs ## Bugs
C'est la première fois que j'utilise un générateur de site statique, le 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 fonctionnement du site n'est donc pas optimal
**catégories** ne fonctionnent pas (pages blanches) pour une raison encore
mystérieuse.

View file

@ -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 <sys/utsname.h>
#include <string.h>
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
```

View file

@ -0,0 +1,14 @@
#include <sys/utsname.h>
#include <string.h>
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;
}