Et le gars, ça ne lui est pas venu à l’esprit qu’il y a comme un soucis ?
Et en définitive, le fait qu’il exploite une parade, ne se met-il pas à la fois en tant que « suspect » (je ne connais pas exactement les conséquences pour contourner cette censure), mais aussi ne démontre-t-il pas que son système est inefficace et complètement insensé ?
Je suis fatigué de voir ce genre de sottises …
Pour commencer, oui, l’arithmétique des pointeurs dans la programmation actuelle, et globalement l’utilisation du langage C, est quelque chose de plus en plus rare, car la majorité des langages sont dits de haut niveau, ils font abstraction du code machine, et leur typage est dynamique.
Toutefois, le langage C a certains atouts (pas de démonstration, ce n’est pas le but de ce billet), et il est ainsi important de produire du code robuste et modulable.
Prenons le cas où vous devez manipuler à travers les paramètres d’une fonction :
- des listes (une dimension) ;
- des matrices/tableaux (deux dimensions) ;
- des volumes (trois dimensions) ;
- voire autant de profondeurs de pointeurs dont vous avez besoin (x dimensions).
(Exemple et démonstration plus bas)
Pour une allocation de mémoire sur une variable faites à partir de pointeurs d’objets, le comportement est :
mytype *my_variable;
my_variable = malloc(sizeof(mytype));
Mais ensuite, si ce n’est plus un seul niveau de pointeurs, mais plusieurs, il faut donc calculer le nombre de pointeurs à mettre : combien d’astérisques à écrire ? est-ce vraiment utile, i.e "void *" ne suffit-il pas ? ce nombre a-t-il un impact ?
Et si on change de type ? par exemple, à l’intérieur d’une structure, vous ne déclarez pas la variable, du coup, il faut aller chercher le type de la variable en question, ce qui n’est pas forcément facile, et si ça change, vous devez manipuler le code.
Voici une solution : utilisez l’idiomatique suivante :
my_var = malloc(sizeof(*my_var));
Il suffit de remarquer qu’il suffit simplement de rajouter un astéristique par rapport à la variable dans le paramètre de gauche, dans le contenu de l’appel sizeof, et c’est tout.
Exemple, vous avez une matrice de "choses", chose pouvant être un entier, un nombre à virgule, un pointeur, une structure, etc, mais que c’est une donnée ici d’un des paramètres de la fonction, voici le résultat :
void myFunction(mytype my_var) {
…
my_var = malloc(sizeof(my_var));
…
}
void main(void) {
mytype **myMatrix;
myFunction(&myMatrix);
…
}
Exemple et Situation :
Prenons le cas où vous avez déjà une liste d’objets, comme une liste de sommets (“vertex/vertices” en anglais) dans un graphe (“graph”) contenant un nombre important de paramètres et d’informations. Recopier le contenu alors que vous souhaitez manipuler l’objet pour lire et créer d’autres ensembles n’est pas le plus efficace, la mémoire s’en alourdi : il suffit d’appeler le pointeur sur l’objet en question.
Déterminons les enfants d’un sommets dans un graphe, avec les arêtes qui les relient (“edge” en anglais) ; on va donc à partir d’un graphe "g" et d’un sommet "v" recevoir une liste de sommets "listChildren", et le nombre d’éléments de cette liste. Comme indiqué en introduction, on ne cherche pas à recopier les données, mais on cherche à recevoir leurs pointeurs. Pareil pour les éléments passés en paramètres en tant que source d’informations.
Remarque : j’évite au maximum d’avoir des variables globales, et je mets en premier dans les paramètres d’une fonction les données qui seront modifiées.
Remarque : pour simplifier la lecture, on pourrait aussi utiliser un “typedef” pour parler de pointeurs sur les différents objets, comme "pgraph" = "graph ", "pvertex" = "vertex ", etc, mais ça devient lourd à utiliser, et ce n’est pas entièrement pratique si on ne l’utilise pas entièrement.
Nous avons en entrée :
- un "graph my_graph" ;
- un "vertex current_vertex" ;
- une liste de pointeurs de sommets "vertex **my_child" ;
- et une valeur de retour, "int nb_children".
La liste des paramètres de la fonction "childrenVertices" ainsi se compose :
- pour le graphe "g" : graph *g ;
- pour le sommet "v" : vertex *v ;
- pour la liste de sommets, nous allons modifier son contenu, il faut rajouter un pointeur dessus : "vertex ***list_children" ;
- et le paramètre de retour sera un entier "int".
int childrenVertices(vertex **list_children, graph g, vertex *v);
À l’intérieur, l’allocation mémoire pour "list_children" sera :
list_children = malloc(nb_vertices sizeof(**list_children));
et son appel sera :
nb_children = childrenVertices(&my_child, &my_graph, ¤t_vertex);
En conclusion, la fonction "childrenVertices" ne manipule que des pointeurs, ce qui économise beaucoup plus de place par rapport à des données dans des structures (sauf pour les petits types, comme les entiers, qui sont moins volumineux dans une architecture 64 bits (4 octets, soient 32 bits pour un entier relatif "int") que pour un pointeur, 8 octets soient 64 bits en archi 64 bits.
Parce que ce sont des humains qui les utilisent.
Le présentéisme, ou le fait de rester tard au travail, qui n’entraîne pas forcément une augmentation de la quantité de travail accompli.
Un ensemble de règles pour avoir du code plus stable en C.
De mon point de vue, je trouve que ça alourdit le code, le compliquant à certains passages (sûrement une question d’habitudes), voire le rend moins portable, mais rend son comportement plus consistent sur de différentes plateformes.
Citation de l’article :
« Imaginez, vous êtes dans un restaurant, un café, une boutique… Vous surfez sur Internet. Vous vous connectez, quand soudain… vous réalisez que vous avez une nouvelle demande d’ami dans votre compte Facebook. Vous ne connaissez pas la personne, mais le visage qui apparaît vous semble familier. En levant la tête… vous voyez tout à coup le visage de ce mystérieux internaute. Voilà l’idée de ce nouvel algorithme Facebook. »
À ce niveau là, il s’agit tout simplement de surveillance pure et dure.
Sauvegarde ici, car oh punaise, je le sens venir, les problèmes que je vais devoir corriger avec cet OS … Si ça ne tenait qu’à moi, je n’y toucherai tout simplement pas.
-------- BEGIN --------
Activer le God Mode : GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}
Lister et Supprimer des applications (Powershell) :
Get-AppxPackage -User UTILISATEUR
Remove-AppxPackage NOMCOMPLETDUPACKAGEADESINSTALLER
Désactiver les fonctions indiscrètes :
Logiciel : Disable Windows 10 Tracking - https://github.com/10se1ucgo/DisableWinTracking/releases
Logiciel : Destroy Windows 10 Spying - https://github.com/Nummer/Destroy-Windows-10-Spying
Logiciel : O&O ShutUp10 - http://www.oo-software.com/en/shutup10 (http://www.libellules.ch/dotclear/index.php?post/2015/11/07/OO-ShutUp10)
Le dossier windows 10 de libellules.ch : http://www.libellules.ch/dotclear/index.php?category/Windows-10
De nombreux articles sur Windows 10 par niko{pik} : http://www.nikopik.com/?submit=&s=windows+10
src : http://korben.info/windows-10-activez-le-mode-god.html
src : http://korben.info/windows-10-comment-desinstaller-candy-crush-ou-dautres-applications-qui-pre-installees.html
src : http://korben.info/windows-10-un-freeware-pour-desactiver-toutes-les-fonctionnalites-un-peu-trop-curieuses.html
src : http://www.libellules.ch/dotclear/index.php?post/2015/08/09/DoNotSpy-10
src : http://korben.info/windows-10-comment-reprendre-le-dessus.html
src : http://www.nikopik.com/2015/08/des-sites-de-telechargement-bannissent-les-utilisateurs-de-windows-10.html
src : http://www.nikopik.com/2015/08/loutil-de-telemetrie-de-windows-10-debarque-aussi-sur-windows-7-et-8-1-via-une-mise-a-jour.html
-------- END --------
Écrire en barré, sabré, souligner, double souligné, pointillé ou ligne de vague, le tout en Unicode ? Hop !
L’Histoire sous hallucinogène.
Puisque j’oublie souvent, voilà une méthode simple pour générer un champ SSHFP :
ssh-keygen -r <fqdn> -f <file>
en remplaçant "<fqdn>" par votre nom de domaine avec le nom de votre machine, comme "foo.example.com", et "<file>" par le chemin vers le fichier.
Pour recréer à partir d’OpenSSL https://unix.stackexchange.com/questions/121880/how-do-i-generate-sshfp-records#133957
« En fait si, et vous également ! »
Un nouveau coup dure pour l’anonymat.
Toutefois, je comprends le conseil de l’ANSSI, mais ce n’est pas une solution acceptable.
Pour infos, la liste des nœuds de sortie est disponible ici :
https://check.torproject.org/exit-addresses
Un petit rappel concernant DKIM, un protocole qui permet de vérifier l’authenticité d’un courriel.
TL;DR: NE PAS utiliser des clefs de moins de 1024 bits.
Toutefois, ma question concernait une taille de clef plus longue, comme 2048 ou 4096 comme utilisées pour les certificats TLS, si ça risque de poser problème avec les tailles des requêtes DNS.
Seraient les dernières heures de Bitcoin ?
Oh non …
Cette mise à jour d’OpenSSL supprime des fonctionnalités et ainsi des symboles dans les binaires. Du coup, l’ensemble, voire la totalité des programmes utilisant OpenSSL deviennent cassés, et doivent être recompilés.
En même temps, cette mise à jour corrige de nombreuses failles et bulletins de sécurité, il ne faut pas l’ignorer.
https://www.openssl.org/news/secadv/20160301.txt
Voici le lien vers le message d’annonce de cette nouvelle version, qui indique que SSLv2 est supprimé, en plus d’être désactivé (euh ?).
https://marc.ttias.be/openssl-announce/2016-03/msg00002.php
EDIT 23:09+01:00: un article en français, parlant de l'attaque DROWN (Decrypting RSA using Obsolete and Weakened eNcryption) http://www.numerama.com/tech/149306-drown-un-tiers-des-serveurs-https-est-vulnerable-a-une-nouvelle-faille-critique.html
Avec un site Web, et un outil :
https://drownattack.com/
https://github.com/nimia/public_drown_scanner
Plus d’articles :
http://www.zdnet.com/article/dont-let-your-openssl-secured-web-sites-drown/
EDIT 2015-03-05 : Article de Bortzmeyer https://www.bortzmeyer.org/drown.html
Oh, un nouveau Raspberry Pi, avec un SoC 64 bits, au lieu de l’actuel ARM11 en 32 bits. :-)
Et en plus, il intègre du Wi-fi (fréquences 2,4 GHz, sûrement du Wi-fi 802.11n comme le pense l’article) et du Bluetooth 4.0, ce qui est dommage que ce ne soit pas en version 4.2 https://en.wikipedia.org/wiki/Bluetooth#v4.2
(Via le Jounal du Hacker https://www.journalduhacker.net/s/hqjslo/le_raspberry_pi_3_arrive_wi-fi_et_bluetooth_int_gr_64_bits)
Pour l’instant, c’est encore discret, mais voilà, ça y est, et surtout, ce sont des publicités basées sur des données d’utilisations, donc, du profilage.
Alors que cette mise à jour est encore en mode gratuit, avec cette nouvelle, aucune raison d’y passer.
Des conseils pour stocker correctement, de nos jours, les mots de passe, dans différents langages.
(Via SebSauvage http://sebsauvage.net/links/?50sqeQ)
Le post en lui-même n'est pas important, mais c'est plutôt les explications et bidouilles sur le système de fichiers derrière /proc.
À savoir, /proc/<pid>/exe est un lien symbolique vers le chemin de l’exécutable, sauf ça reste être un "fd" (file descriptor) tant que le processus n'est pas terminé, ce qui permet de continuer d'exécuter le processus même si son programme n'est plus (virtuellement) sur le disque dur (un fichier n'est pas supprimé tant que des références vers ce fichier sont ouvertes).