Dans le cadre d'un reverse, le langage utilisé par le développeur peut être une précieuse source d'informations. En particulier, le C++ offre la possibilité de déterminer le type d'une variable pendant l'exécution. Cela implique la présence de renseignements sur les classes dans le binaire. Nous allons voir quelles informations doivent être présentes, comment elles sont stockées par le compilateur de Microsoft (cl.exe) puis comment les retrouver pour reconstruire automatiquement le graphe d'héritage.
Le script d'exemple ainsi que l'ensemble des codes sources utilisés dans cet article sont téléchargeables à l'adresse www.r-3-t.org/ms_rtti.7z.
1. Rappel sur le langage C
Lorsqu'un logiciel est écrit en langage C, il est relativement aisé d’en déduire les structures utilisées. Au paragraphe 6.7.2.1 du standard [1], on peut lire :
« Within a structure object, the non-bit-field members and the units in which bit-fields reside have addresses that increase in the order in which they are declared. A pointer to a structure object, suitably converted, points to its initial member (or if that member is a bit-field, then to the unit in which it resides), and vice versa. There maybe unnamed padding within a structure object, but not at its beginning. »
En d'autres termes, il existe une correspondance directe entre le code source C décrivant une structure et le code assembleur généré. Par exemple, la structure suivante :
typedefstruct {
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première
Les derniers articles Premiums
Les derniers articles Premium
Le combo gagnant de la virtualisation : QEMU et KVM
C’est un fait : la virtualisation est partout ! Que ce soit pour la flexibilité des systèmes ou bien leur sécurité, l’adoption de la virtualisation augmente dans toutes les organisations depuis des années. Dans cet article, nous allons nous focaliser sur deux technologies : QEMU et KVM. En combinant les deux, il est possible de créer des environnements de virtualisation très robustes.
Brève introduction pratique à ZFS
Il est grand temps de passer à un système de fichiers plus robuste et performant : ZFS. Avec ses fonctionnalités avancées, il assure une intégrité des données inégalée et simplifie la gestion des volumes de stockage. Il permet aussi de faire des snapshots, des clones, et de la déduplication, il est donc la solution idéale pour les environnements de stockage critiques. Découvrons ensemble pourquoi ZFS est LE choix incontournable pour l'avenir du stockage de données.
Générez votre serveur JEE sur-mesure avec Wildfly Glow
Et, si, en une ligne de commandes, on pouvait reconstruire son serveur JEE pour qu’il soit configuré, sur mesure, pour les besoins des applications qu’il embarque ? Et si on pouvait aller encore plus loin, en distribuant l’ensemble, assemblé sous la forme d’un jar exécutable ? Et si on pouvait même déployer le tout, automatiquement, sur OpenShift ? Grâce à Wildfly Glow [1], c’est possible ! Tout du moins, pour le serveur JEE open source Wildfly [2]. Démonstration dans cet article.
Utilisation avancée de SQLPage
Poursuivons notre découverte de SQLPage en explorant certaines de ses fonctionnalités avancées qui sont généralement indispensables à tous sites ou applications. Dans cet article, nous allons parler de PostgreSQL, d’authentification et de gestion des droits.