Au temps pour moi, on est en syntaxe GNU (ou AT&T), où le sens est contraire de la syntaxe INTEL.
Ceci dit, pour accéder au registre, il faut doubler le "%":
En bref, vu que je n'ai pas trop compris ce voulais faire l'OP:
__asm("movq %%rsi,%0" : "=r" (str));
__asm("movq $7,%rdx \n\
movq $1,%rdi \n\
movq $1,%rax \n\
syscall");
Surtout, movq fonctionne comme toutes les fonctions de copie: le premier argument est la destination(cible).
Là, j'ai l'impression que l'auteur veut faire l'inverse.
En fait, je comprend pas trop ce qu'est sensé faire ce code.
Quel FUD ? Rappelez nous donc la définition d'un FUD.
et sérieux,
Ouais, sérieux, où il est le FUD ?
Ce n'est pas parce que c'est libre que ça ne peut pas être merdique :
'vois pas le rapport avec la choucroute, de l'âge du capitaine ou de l'homme de paille.
si un appli ne supporte pas HTTPS mais que HTTP en 2019, c'est une appli de merde
Non.
que de chouiner sur une évolution qui protègent la vie privée et en fit juste de la sécu de base
HTTPS protège notre vie privée, sans déconner ? Il protège vos identifiants qui transite via le réseau contre les attaques Man-in-the-middle et vous assure que le site que vous consultez a obtenu un certificat pour son nom de domaine: point barre.
FaceBook, GMail et autre «réseaux sociaux» ne sont accessibles qu'en HTTPS. Hummm, tu la sens la vie privée ?
Nombre de clients des sites Web en HTTPS leur ont confiés leurs données privées, qui les ont revendu à des tiers conformément au CGU que personne n'a lu.
mais ça a l'air de vous embêter que des gens s’intéressent à leur vie privée
C'est ça, des gens qui confient à peu près tout à Google, Facebook ou kikoolol depuis leur Smartphone qui les géolocalise en permanence.
Mais via des connexions chiffrées, donc tout va bien.
Arrêtez avec vos FUD anti vie privée et anti-sécurité, ça gonfle.
Faire croire que naviguer sur des sites qui se contentent de rendre du contenu public, voire statique, en HTTP, met en danger votre privée c'est du FUD. Faire croire que circuler exclusivement HTTPS vous protège est pire: c'est un mensonge. Pour ça, il faut faire beaucoup plus attention.
Si on veut s'assurer que personne ne sache sur quel site on navigue et ce que l'on consulte, il faut au minimum passer dans un VPN, sans parler des fuite de requêtes DNS. Et avoir confiance dans le gestionnaire du bidule, comme dans les sites que l'on consulte.
[ MMU] [Memory Pages]
Pourrais-tu, pour ma culture, citer des archis pour lesquelles ce n'est pas le cas?
En l'absence de MMU ( MIPS, Cortex-M ou Cortex-R par exemple), jouer de mémoire virtuelle devient compliqué, la plupart des OS «classiques» ne le permettent pas (notamment les *BSD).
L'usage de linux sans MMU est loin d'être trivial, sans parler de la libc. Pour cela il faut regarder du coté de µClinux.
Les noyaux «temps-réel» ou minimalistes ont une approche différente et vont privilégier les accès «directs», voire configurer la MMU en ce sens quand elle existe. D'autant que la pagination entraîne la fragmentation de la mémoire dans des système où cette ressource est rare.
Ce qui n’empêche pas d'avoir parfois une MPU (Cortex R), pour protéger un minimum les accès.
- Parce qu'ici, c'est la notion même de processus qui est virtuelle :) -
Le terme est «flat».
Oh, ça va, j'ai juste essayé d'utiliser un maximum de mots français… :)
Ah ce sujet, si l'OP nous lit toujours, les adresses (virtuelles) de l'adressage d'un processus se trouvent dans:
/proc/[PID]/maps
Et plein d'autres info dans /proc/[PID]/stat, /proc/[PID]/statm et leur synthèse /proc/[PID]/status.
Il te suffira d'appeler ton programme avec, en premier argument, une chaine composée d'un peu plus de 50 caractères (dépend des options de compil', de l'archi, etc…) pour avoir un beau stack overflow.
C'est plus une corruption de pile due à un débordement de tampon (buffer overflow) qu'un débordement de pile (stack overflow), en fait.
Un exemple plus classique, en abusant de la récursivité:
#include<stdlib.h>#include<stdio.h>#include<string.h>#include<sys/resource.h>staticsize_tn;staticintchienGeant(char*c){charbuf[1024];strncpy(buf,c,1024);printf("%zu:%s\n",++n,buf);returnchienGeant(&buf[0]);}intmain(){printf("coucou\n");structrlimitl={8192,8192};if(setrlimit(RLIMIT_STACK,&l)){perror("unable to set limit");}chienGeant("un chient geant, c'est comme un chien mais en plus grand.");return0;}
Avec
warning: all paths through this function will call itself [-Winfinite-recursion]
Ce qu'il me pose probleme c'est que la mémoire est sensé etre contiguë pour le developpeur.
Tout dépend de la mémoire dont on cause. Dans votre cas, il s'agit de l'adressage d'un processus (Process address space), il est virtuel et indépendant de celui des autres processus.
La structure mm_struct vous donnent en donne les détails, vu du noyau.
On y retrouve certaines des partitions ELF que vous mentionnez dans le sujet,
start_code
start_data
start_brk
start_stack
arg_start
Le schémas que vous donnez est trop simple, par exemple il existera une pile allouée par thread, des segments (region) alloués selon les besoins ( VMA, bibliothèques, mapping divers ) …
Or à un moment le tas va arriver vers la mémoire de la pile et il va y avoir un saut de 8Mo (taille de la pile) pour pouvoir recréer de la mémoire dans le tas
Gardez à l'esprit que ce schéma est une représentation virtuelle de la mémoire vu d' un unique processus. Il ne correspond en rien ce qui se passe dans la mémoire physique et n'est pas partagé avec les autres processus. Il est plus probable que vous allez choper un Out of Memory avant que les deux pointeurs ne se rejoignent.
Il ne reste qu'à tester, en espérant que ça ne se limite pas aux CPU Intel et AMD,
Malheureusement, après une lecture plus attentive des docs, il me semble que seuls ces archis sont prises en charge. A moins que le portage vers illumos n'ait changé quelque chose, il s'appuie fortement sur des fonctions de virtualisation Intel et AMD.
Il reste quand même quelque chose de perturbant.
Contrairement à cat qui va cracher ses octets tel que dans le terminal, ls va parser le nom du fichier à afficher et vérifier s'il peut l'afficher.
Pour cela il utilise les fonctions de type mbrtowc ou wcwidth qui dépendent de LC_CTYPE pour la conversion.
S'il n'y arrive pas, comme dans votre cas, il devrait afficher des ? (question mark) à la place.
Pas le truc bizarre qui, remâché par cat,peut sortir un caractère correct …
Autrement dit comment je peux envoyer des data à ma carte vidéo avec mon propre noyau fait maison.
Le moins «complexe» serait de s'assurer que l'on peut attaquer la carte vidéo via une interface VGA voire SVGA/VESA-VBE.
L'adresse donnée pour afficher en mode «texte» étant justement celle du VGA, ça devrait coller.
Pour résumer, il faut passer en mode «graphique» ( via INT 10 ) et coller ses pixels au bon offset à partir de 0x0000A000.
il me semblait que la soustraction d'un nombre binaire se faisait via le complément A2
Oui, mais c'est l'ALU qui le fait, via un jeu de portes logiques. Il n'est pas question là, stricto sensu, de cycles d'horloge.
D'après la page wikipedia 8086, cela prend trois cycles à l'ALU pour manipuler des registres.
Justement j'aimerai savoir combien de cycle d'horloge dure un sub, mais je ne connais aucun moyen expérimental pour savoir le nombre de cycle d'horloge pour réaliser une opérande particuliere
Le plus compliqué, ça va être de trouver une carte avec un 8086 en état de marche pour mesurer ça …
En même temps, quelle idée d'utiliser commande au lieu de $(commande) ? :)
C'est historique et portable, l'équivalence $() n'existe pas sous (t)csh par exemple.
L'idée est de modifier la profondeur de l'interprétation à l'intérieur des guillemets, en usant de guillemets différentes.
pourquoi s'amuser à utiliser for qui déclenche un découpage par mot plutôt que de passer par un while qui découpe par ligne ?
Je préfère utiliser directement la sortie de find en appelant un script de traitement par fichier, passé à exec ; ( et surtout pas exec +).
devrait faire l'affaire. Ici, la clef se trouve en début de fichier ( -s 0 ).
Pour donner tout ça à manger à find , il est plus facile de décomposer le tout:
#!/bin/shwhere=/home/david
to=/home/david/test
for i in `find ${where} -type f `;dom=`{mathjax}( xxd -l 6 -s 0 -ps "`{i}")["`{mathjax} m"="23212f62696e"]&& cp "`{i}""${to}/"done
Par contre, cela ne prend pas en charge les fichiers avec des espaces dans le nom.
Ceci se traduit par,
pour chaque fichier trouvé dans where, le stocker dans i
récupérer les 6 premier octets de ce dernier
comparer ces octets à clef
si correspondance, copier le fichier dans to
Il y a un bug dans l'affichage du code, les simple quotes sont interprétées.
Des mathjax apparaissent
Posté par David Marec .
En réponse au message probleme avec syslog.
Évalué à 4.
Dernière modification le 05 juillet 2019 à 16:50.
j'ai regardé dans mon répertoire courant et aussi dans /var/log mais il n'y a aucun fichier.
Votre code confie les logs à syslogd, ou tout autre service de log.
Sans configuration particulière, ce dernier ne redirigera vos entrées que vers /var/log/messages et vers la console pour les erreurs.
- Plutôt que d'utiliser argv[0], utilisez NULL. -
Configurez /etc/syslog.conf pour associer un fichier à votre tag.
Ensuite, basculer d'un projet à l'autre se fait très simplement en utilisant la notion de "session" de tmux, et en utilisant les touches Ctrl+B W
En fait, non. Il s'agit de la notion de « Fenêtre » du client, choose-window, comme pour C-p et C-n.
Pour changer de session à partir d'un client, c'est choose-session, soit C-s.
La documentation, et surtout le comportement de systemctl sans paramètre, semblent contredire cette assertion.
En quoi ?
En l'absence de sous-commande explicite, le programme en définit une par défaut. Cela signifie bel et bien qu'une sous-commande est requise pour faire fonctionner le programme.
[^] # Re: C sur Raspberry
Posté par David Marec . En réponse à la dépêche Ordinateur à carte unique : Raspberry Pi 4 et consort. Évalué à 8.
On peut aussi préciser que l'on peut manipuler les «pins» du rpi avec des commandes shell.
En gros:
Pour les curieux, il existe (en C) de nombreuses interfaces dédiées des GPIO.
-
gpio-leds
,gpio-keys
,pinctrl
-[^] # Re: args
Posté par David Marec . En réponse au message mettre de l'assembleur dans du C. Évalué à 2.
Au temps pour moi, on est en syntaxe GNU (ou AT&T), où le sens est contraire de la syntaxe INTEL.
Ceci dit, pour accéder au registre, il faut doubler le "%":
En bref, vu que je n'ai pas trop compris ce voulais faire l'OP:
__asm("movq %%rsi,%0" : "=r" (str));
__asm("movq $7,%rdx \n\
movq $1,%rdi \n\
movq $1,%rax \n\
syscall");
[^] # Re: args
Posté par David Marec . En réponse au message mettre de l'assembleur dans du C. Évalué à 2.
Surtout,
movq
fonctionne comme toutes les fonctions de copie: le premier argument est la destination(cible).Là, j'ai l'impression que l'auteur veut faire l'inverse.
En fait, je comprend pas trop ce qu'est sensé faire ce code.
[^] # Re: http / https
Posté par David Marec . En réponse au journal Écrire des liens pérennes dans ses pages web. Évalué à 5.
Quel FUD ? Rappelez nous donc la définition d'un FUD.
Ouais, sérieux, où il est le FUD ?
'vois pas le rapport avec la choucroute, de l'âge du capitaine ou de l'homme de paille.
Non.
HTTPS protège notre vie privée, sans déconner ? Il protège vos identifiants qui transite via le réseau contre les attaques Man-in-the-middle et vous assure que le site que vous consultez a obtenu un certificat pour son nom de domaine: point barre.
FaceBook, GMail et autre «réseaux sociaux» ne sont accessibles qu'en HTTPS. Hummm, tu la sens la vie privée ?
Nombre de clients des sites Web en HTTPS leur ont confiés leurs données privées, qui les ont revendu à des tiers conformément au CGU que personne n'a lu.
C'est ça, des gens qui confient à peu près tout à Google, Facebook ou kikoolol depuis leur Smartphone qui les géolocalise en permanence.
Mais via des connexions chiffrées, donc tout va bien.
Faire croire que naviguer sur des sites qui se contentent de rendre du contenu public, voire statique, en HTTP, met en danger votre privée c'est du FUD. Faire croire que circuler exclusivement HTTPS vous protège est pire: c'est un mensonge. Pour ça, il faut faire beaucoup plus attention.
Si on veut s'assurer que personne ne sache sur quel site on navigue et ce que l'on consulte, il faut au minimum passer dans un VPN, sans parler des fuite de requêtes DNS. Et avoir confiance dans le gestionnaire du bidule, comme dans les sites que l'on consulte.
[^] # Re: derniere chose
Posté par David Marec . En réponse au message question sur la structure du code que fait le compilateur (.text, .bss, .heap ...). Évalué à 5.
En l'absence de MMU ( MIPS, Cortex-M ou Cortex-R par exemple), jouer de mémoire virtuelle devient compliqué, la plupart des OS «classiques» ne le permettent pas (notamment les *BSD).
L'usage de linux sans MMU est loin d'être trivial, sans parler de la
libc
. Pour cela il faut regarder du coté de µClinux.Les noyaux «temps-réel» ou minimalistes ont une approche différente et vont privilégier les accès «directs», voire configurer la MMU en ce sens quand elle existe. D'autant que la pagination entraîne la fragmentation de la mémoire dans des système où cette ressource est rare.
Ce qui n’empêche pas d'avoir parfois une MPU (Cortex R), pour protéger un minimum les accès.
- Parce qu'ici, c'est la notion même de processus qui est virtuelle :) -
Ah ce sujet, si l'OP nous lit toujours, les adresses (virtuelles) de l'adressage d'un processus se trouvent dans:
/proc/[PID]/maps
Et plein d'autres info dans
/proc/[PID]/stat
,/proc/[PID]/statm
et leur synthèse/proc/[PID]/status
.[^] # Re: derniere chose
Posté par David Marec . En réponse au message question sur la structure du code que fait le compilateur (.text, .bss, .heap ...). Évalué à 4.
Ce n'étais pas le sujet, je pense, de connaître la gestion de mémoire d'un point de vue physique.
Cela dépend des architectures, mais majoritairement, oui.
En fait, toutes sont virtuelles ou logiques.
Le terme est «flat». La MMU est responsable de plein d'autres choses, dont la pagination, mais c'est devenu d'une complexité redoutable de nos jours.
Arf, j'ai essayé de demander "linux stack overflow" à Google ;)
[^] # Re: Hope this helps
Posté par David Marec . En réponse au message question sur la structure du code que fait le compilateur (.text, .bss, .heap ...). Évalué à 2.
C'est plus une corruption de pile due à un débordement de tampon (buffer overflow) qu'un débordement de pile (stack overflow), en fait.
Un exemple plus classique, en abusant de la récursivité:
Avec
[^] # Re: derniere chose
Posté par David Marec . En réponse au message question sur la structure du code que fait le compilateur (.text, .bss, .heap ...). Évalué à 4.
Tout dépend de la mémoire dont on cause. Dans votre cas, il s'agit de l'adressage d'un processus (Process address space), il est virtuel et indépendant de celui des autres processus.
La structure mm_struct vous donnent en donne les détails, vu du noyau.
On y retrouve certaines des partitions ELF que vous mentionnez dans le sujet,
Le schémas que vous donnez est trop simple, par exemple il existera une pile allouée par thread, des segments (region) alloués selon les besoins ( VMA, bibliothèques, mapping divers ) …
Gardez à l'esprit que ce schéma est une représentation virtuelle de la mémoire vu d' un unique processus. Il ne correspond en rien ce qui se passe dans la mémoire physique et n'est pas partagé avec les autres processus. Il est plus probable que vous allez choper un Out of Memory avant que les deux pointeurs ne se rejoignent.
[^] # Re: Du côté des xBSD ?
Posté par David Marec . En réponse au message UltraSPARC et virtualisation. Évalué à 3. Dernière modification le 30 juillet 2019 à 23:40.
En effet, c'était écrit dessus, en fait.
Malheureusement, après une lecture plus attentive des docs, il me semble que seuls ces archis sont prises en charge. A moins que le portage vers illumos n'ait changé quelque chose, il s'appuie fortement sur des fonctions de virtualisation Intel et AMD.
Reste QEMU.
[^] # Re: Du côté des xBSD ?
Posté par David Marec . En réponse au message UltraSPARC et virtualisation. Évalué à 5. Dernière modification le 30 juillet 2019 à 22:17.
… Le plus réputé sur cette architecture étant OpenBSD.
Curieux, bhyve la solution hyperviseur de FreeBSD, devrait fonctionner, étant elle même portée sous illumos.
# encodage
Posté par David Marec . En réponse au message Problème encodage et ls . Évalué à 2. Dernière modification le 30 juillet 2019 à 22:04.
Il reste quand même quelque chose de perturbant.
Contrairement à
cat
qui va cracher ses octets tel que dans le terminal,ls
va parser le nom du fichier à afficher et vérifier s'il peut l'afficher.Pour cela il utilise les fonctions de type
mbrtowc
ouwcwidth
qui dépendent deLC_CTYPE
pour la conversion.S'il n'y arrive pas, comme dans votre cas, il devrait afficher des
?
(question mark) à la place.Pas le truc bizarre qui, remâché par
cat
,peut sortir un caractère correct …[^] # Re: sans noyau, pas de framebuffer...
Posté par David Marec . En réponse au message server X et frame buffer.. Évalué à 4.
Le moins «complexe» serait de s'assurer que l'on peut attaquer la carte vidéo via une interface VGA voire SVGA/VESA-VBE.
L'adresse donnée pour afficher en mode «texte» étant justement celle du VGA, ça devrait coller.
Pour résumer, il faut passer en mode «graphique» ( via
INT 10
) et coller ses pixels au bon offset à partir de0x0000A000
.[^] # Re: je n'y connais pas grand chose en assembleur
Posté par David Marec . En réponse au message question sur le processeur 8086 et les cycles d'horloge. Évalué à 3. Dernière modification le 29 juillet 2019 à 20:32.
Oui, mais c'est l'ALU qui le fait, via un jeu de portes logiques. Il n'est pas question là, stricto sensu, de cycles d'horloge.
D'après la page wikipedia 8086, cela prend trois cycles à l'ALU pour manipuler des registres.
Le plus compliqué, ça va être de trouver une carte avec un 8086 en état de marche pour mesurer ça …
[^] # Re: Lit tes cours / demande à ton prof ?
Posté par David Marec . En réponse au message Script pour vérifier si une chaîne de caractère existe dans le magic number. Évalué à 2. Dernière modification le 29 juillet 2019 à 20:18.
C'est historique et portable, l'équivalence
$()
n'existe pas sous(t)csh
par exemple.L'idée est de modifier la profondeur de l'interprétation à l'intérieur des guillemets, en usant de guillemets différentes.
Je préfère utiliser directement la sortie de
find
en appelant un script de traitement par fichier, passé àexec ;
( et surtout pasexec +
).[^] # Re: Lit tes cours / demande à ton prof ?
Posté par David Marec . En réponse au message Script pour vérifier si une chaîne de caractère existe dans le magic number. Évalué à 2. Dernière modification le 24 juillet 2019 à 20:50.
A noter que si la clef se situe au même endroit dans les fichiers, il n'est pas utile de la passer à
grep
.devrait faire l'affaire. Ici, la clef se trouve en début de fichier (
-s 0
).Pour donner tout ça à manger à
find
, il est plus facile de décomposer le tout:Par contre, cela ne prend pas en charge les fichiers avec des espaces dans le nom.
Ceci se traduit par,
Il y a un bug dans l'affichage du code, les simple quotes sont interprétées.
Des mathjax apparaissent
[^] # Re: Personne pour le moment
Posté par David Marec . En réponse au message Diner des philosophes et jeu des bâtonnets. Évalué à 6.
beaucoup moins, car il ne va pas facturer 240 jours par an.
# messages
Posté par David Marec . En réponse au message probleme avec syslog. Évalué à 4. Dernière modification le 05 juillet 2019 à 16:50.
Votre code confie les logs à syslogd, ou tout autre service de log.
Sans configuration particulière, ce dernier ne redirigera vos entrées que vers
/var/log/messages
et vers la console pour les erreurs.- Plutôt que d'utiliser
argv[0]
, utilisezNULL
. -Configurez
/etc/syslog.conf
pour associer un fichier à votre tag.# la source
Posté par David Marec . En réponse au lien Le système de mise en cache du noyau Linux serait-il plus lent que les transferts E/S directs ? Non. Évalué à 6.
https://lkml.org/lkml/2019/6/13/1892
[^] # Re: Il n'y aura pas de référendum
Posté par David Marec . En réponse au journal Référendum d’initiative partagée : couvrez ces noms que je ne saurais voir. Évalué à 3.
A noter que le droit d'initiative citoyenne européenne vient de là.
[^] # Re: Transparence (et divers)
Posté par David Marec . En réponse au journal Référendum d’initiative partagée : couvrez ces noms que je ne saurais voir. Évalué à 1.
Jusqu'en 1971, les femmes non plus, n'en faisait pas partie.
[^] # Re: Portable ?
Posté par David Marec . En réponse au message Portable 13" économique. Évalué à 2.
Tiens, c'est une bonne piste pour fournir un "PC" à mon aînée.
C'est vraiment le même budget ? Je ne vois pas beaucoup d'écrans à moins de 200€.
[^] # Re: mouais
Posté par David Marec . En réponse au journal Une Sacem du logiciel libre?. Évalué à 1.
En fait, c'est une exception au droit (d'auteur).
( ou plutôt, celui des « ayants droit » ).
# Session vs Window
Posté par David Marec . En réponse au journal Emacs dans tmux en 24 bits de profondeur. Évalué à 2.
En fait, non. Il s'agit de la notion de « Fenêtre » du client,
choose-window
, comme pourC-p
etC-n
.Pour changer de session à partir d'un client, c'est
choose-session
, soitC-s
.[^] # Re: Notion d'insulte
Posté par David Marec . En réponse au journal Appel à interviews. Évalué à 7.
ça part en couille.
[^] # Re: Options, arguments, sous-commandes
Posté par David Marec . En réponse au message question sur les arguments que l'on donne aux commandes. Évalué à 2.
En quoi ?
En l'absence de sous-commande explicite, le programme en définit une par défaut. Cela signifie bel et bien qu'une sous-commande est requise pour faire fonctionner le programme.
COMMAND
n'est pas optionnel.