Compare commits
2 commits
c50e647f1d
...
c027416fd5
Author | SHA1 | Date | |
---|---|---|---|
c027416fd5 | |||
455d9dcd79 |
4 changed files with 84 additions and 12 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
public/
|
public/
|
||||||
*.bin
|
*.bin
|
||||||
|
*.so
|
||||||
|
|
18
README.md
18
README.md
|
@ -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.
|
|
||||||
|
|
63
content/progsys/TDM_9-les_librairies/index.md
Normal file
63
content/progsys/TDM_9-les_librairies/index.md
Normal 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
|
||||||
|
```
|
14
content/progsys/TDM_9-les_librairies/src/libuname.c
Normal file
14
content/progsys/TDM_9-les_librairies/src/libuname.c
Normal 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;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue