/*----------------------------------------------------------------------------*
|* ENTROPIC / ANSI INK *|
|* grammaire ANSI portable pour la couleur en texte brut *|
*----------------------------------------------------------------------------*/
--[ sommaire ]-------------------------------------------------------------//---
00 .text.summary ................................................. contrat
01 .text.inline ............................................ source/rendu
02 .rodata.palette ............................................... map roles
03 .data.ink ....................................... surcharges denses
3a .data.e_ident ............................................. ELF e_ident
3b .data.p_flags ................................................. p_flags
3c .stack.savedrip ........................................... RIP sauvegard
04 .text.writer ................................................ notation
05 .debug.vmmap .................................................. vm map
06 .note.rules .......................................... erreurs dures
07 .note.refs ............................................. sources doc
[ 0. Résumé ]─────────────────────────────────────────────────────────────//────
primitive : couleur ANSI de premier plan sur texte fixed-width
inline : #[role|texte]
bloc : --[ ink ]-- + voie texte + voie masque
palette : Tokyo Night ANSI [0][1], 16 rôles de premier plan
erreur : un rôle inconnu fait échouer le build
L'encre ANSI est une petite couche de notation pour le texte `.phile`. Elle a
deux missions :
garder la source lisible dans un terminal ;
poser la couleur exactement là où un octet, un bit, un champ ou un nom compt
e.
Ce n'est pas du HTML, du Markdown, ni un langage sémantique d'annotation
binaire. La prose porte toujours l'argument ; l'encre dit juste à l'œil où
atterrir.
.--[ NOTE : signal parcimonieux ]--------------------.
| Traite la couleur comme un breakpoint : pose-la |
| seulement où le lecteur doit s'arrêter et inspecter.|
'----------------------------------------------------'
[ 1. Encre inline ]───────────────────────────────────────────────────────//────
L'encre inline sert aux spans parsemés dans la prose ordinaire :
source : #[G|r--] marque la lecture seule, #[R|PF_X] marque l'exécution.
rendu : r-- marque la lecture seule, PF_X marque l'exécution.
La grammaire est volontairement une seule forme :
#[role|texte]
Les noms de rôle les plus courts sont des octets ANSI uniques :
red green yellow blue magenta cyan
Les couleurs vives utilisent les noms courts en majuscules :
bright-red bright-green bright-yellow bright-blue
bright-magenta bright-cyan bright-black bright-white
Les noms longs sont acceptés quand la lisibilité de la source compte :
source : #[bright-cyan|limite de champ]
rendu : limite de champ
L'échappement est local :
#[r|syntaxe littérale]
échapper un pipe : |
échapper un crochet fermant : ]
[ 2. Palette ]────────────────────────────────────────────────────────────//────
La palette suit les couleurs de terminal Tokyo Night [1], mais reste de forme
ANSI, pas de forme métier. Elle est assez petite pour être mémorisée et assez
stricte pour échouer rapidement quand une faute de frappe se glisse dans un
phile.
.--[ ABI de la palette ]-------------------------.
| 16 noms en entrée, un foreground déterministe. |
| typo == build cassé ; alias drift == bug. |
'------------------------------------------------'
k black K bright-black
r red R bright-red
g green G bright-green
y yellow Y bright-yellow
b blue B bright-blue
m magenta M bright-magenta
c cyan C bright-cyan
w white W bright-white
Map des rôles :
.--[ map des rôles ]-----------------------------------------.
| C syntaxe / délimiteur / limite de champ |
| G parse valide / bit set / signal récupéré |
| Y input contrôlé / offset / voie sélectionnée |
| R exécutable / dangereux / preuve négative |
| K padding / zéro / bruit de fond |
| B plage d'adresses / région mappée |
| M symbole / nom d'objet / mapping externe |
'------------------------------------------------------------'
Page palette du terminal :
+--[ normal ]-----------------------------------------------------------------+
| 00 k.black 01 r.red 02 g.green 03 y.yellow |
| 04 b.blue 05 m.magenta 06 c.cyan 07 w.white |
+--[ bright ]-----------------------------------------------------------------+
| 08 K.bright-black 09 R.bright-red 0a G.bright-green 0b Y.yellow |
| 0c B.bright-blue 0d M.bright-mag 0e C.bright-cyan 0f W.white |
+--[ end ]--------------------------------------------------------------------+
Si un rôle est difficile à distinguer sur cette bande, ne lui fais pas porter le
seul signal important d'une vraie note d'exploit.
[ 3. Blocs d'encre ]──────────────────────────────────────────────────────//────
Utilise la forme bloc quand un artefact a beaucoup de spans colorés. La source
reste deux voies de texte brut :
voie texte : commence par |
voie masque : commence par ~
no-op : "." ou espace laisse le caractère inchangé
Le masque est à la granularité du caractère, donc la surcharge peut pointer la
moitié d'un champ, un octet ou un bit de permission sans changer l'artefact.
[ 3.1 Voie octet ]────────────────────────────────────────────────────────//────
e_ident 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
R magic ELF
C octet de classe
G octets endian/version
K padding zéro
Cette ligne d'en-tête est ennuyeuse exprès : elle prouve l'alignement avant
qu'une annotation maline n'apparaisse.
[ 3.2 Voie flags ]────────────────────────────────────────────────────────//────
p_flags 0x00000005 00000101b PF_R=1 PF_W=0 PF_X=1
Ici le vert marque les bits readable activés, le noir marque les chiffres de
fond, et le rouge marque la permission exécutable.
[ 3.3 Voie stack ]────────────────────────────────────────────────────────//────
rbp-10 41 41 41 41 41 41 41 41 | AAAAAAAA | sled contrôlé
rbp-08 00 9b 2f 74 f8 7f 00 00 | ../t.... | canari, à garder intact
rbp+08 90 10 40 00 00 00 00 00 | ..@..... | RIP sauvegardé
Y padding contrôlé
G octets de canari à préserver
C cible de retour / RIP sauvegardé
K extension zéro
[ 4. L'écrire ]───────────────────────────────────────────────────────────//────
La source littérale reste destinée à être éditée à la main. Un bloc compact :
| rbp+08 90 10 40 00 00 00 00 00
~ CC CC CC KK KK KK KK KK
rend comme :
rbp+08 90 10 40 00 00 00 00 00
Contraste inline :
source : #[Y|offset 0x200] contient #[C|encrpted_img]
rendu : offset 0x200 contient encrpted_img
source : #[R|CBC continu] échoue ; #[G|CBC par PEB] survit.
rendu : CBC continu échoue ; CBC par PEB survit.
.--[ dispatch ]----------------------------------.
| 1 octet d'intérêt -> encre inline |
| octets alignés -> bloc d'encre |
| chemin de raisonn. -> prose simple |
'------------------------------------------------'
[ 5. Lignes de debug ]────────────────────────────────────────────────────//────
L'encre inline marche pour une note de debugger parcimonieuse :
pwndbg> x/gx $rsp
0x7fffffffe3d8: 0x4141414141414141
0x7fffffffe3e0: 0x0000000000401090 ; saved rip
Quand toute la ligne est une carte, utilise un masque :
00400000-00401000 r--p 00000000 ./a.out ; en-têtes ELF
00401000-00402000 r-xp 00001000 ./a.out ; .text, exécutable
7ffffffde000-7ffffffff000 rw-p 00000000 [stack] ; stack utilisateur
B plage d'adresses
G permission readable/writable
R permission exécutable
K champ offset/padding
M objet mappé
[ 6. Règles ]─────────────────────────────────────────────────────────────//────
Rôles inline acceptés :
.--[ rôles inline acceptés ]---------------------------------------.
| court : k r g y b m c w K R G Y B M C W |
| long : black red green yellow blue magenta cyan white |
| bright : bright-black bright-red bright-green bright-yellow |
| bright-blue bright-magenta bright-cyan bright-white |
| forme : #[role|texte] |
'------------------------------------------------------------------'
Octets de masque acceptés :
.--[ octets de masque ]--------------------.
| k r g y b m c w K R G Y B M C W |
| no-op : . ou espace |
'------------------------------------------'
Tout le reste est rejeté. Une faute de frappe dans la notation de couleur doit
échouer comme une faute de frappe dans une adresse, un nom de registre, ou une
constante d'exploit.
[ 7. Références ]─────────────────────────────────────────────────────────//────
[0] Thème VS Code Tokyo Night
https://github.com/tokyo-night/tokyo-night-vscode-theme
[1] Palette ANSI iTerm Tokyo Night
fichier : tokyo-night.itermcolors
repo : tokyo-night/tokyo-night-vscode-theme
--[ fin de la grammaire ]--------------------------------------------------//---