<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hardening consulting (Articles sur tricks)</title><link>https://www.hardening-consulting.com/</link><description></description><atom:link href="https://www.hardening-consulting.com/categories/tricks.xml" rel="self" type="application/rss+xml"></atom:link><language>fr</language><lastBuildDate>Tue, 18 Feb 2025 22:51:03 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Activer les canaris de pile avec GCC</title><link>https://www.hardening-consulting.com/posts/20140108activer-les-canaris-de-pile-avec-gcc.html</link><dc:creator>David FORT</dc:creator><description>&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/security-banner.jpg"&gt;
Je suis tombé sur ce petit &lt;a href="https://securityblog.redhat.com/2013/10/23/debugging-stack-protector-failures/"&gt;article&lt;/a&gt; très intéressant: pour aider au debugging, 
on peut activer la protection renforcée de la pile, une capacité disponible avec les derniers gcc.&lt;/p&gt;</description><category>coding</category><category>développement</category><category>securité</category><category>tricks</category><guid>https://www.hardening-consulting.com/posts/20140108activer-les-canaris-de-pile-avec-gcc.html</guid><pubDate>Wed, 08 Jan 2014 15:37:02 GMT</pubDate></item><item><title>Des signaux dans une classe interface avec Qt</title><link>https://www.hardening-consulting.com/posts/20131112des-signaux-dans-une-classe-interface-avec-qt.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" alt="qt5" src="https://www.hardening-consulting.com/wp-content/uploads/2013/09/qt5.jpg" width="112" height="74"&gt;&lt;/p&gt;
&lt;p&gt;J'ai été récemment confronté à un problème qui m'a occupé un peu. J'avais une classe 
abstraite pure qui servait d'interface. Elle devait servir à faire le lien entre une 
application et l'implémentation qui resterait cachée (et qui évite aussi de linker avec
 l'implémentation). Jusque là rien de méchant, c'est du &lt;em&gt;C++&lt;/em&gt; avec &lt;em&gt;Qt5.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;L'implémentation fait des choses et je voulais qu'elle puisse émettre des signaux et
que le code externe puisse s'abonner aux signaux.&lt;/p&gt;
&lt;p&gt;Donc quelque chose dans le genre:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="c1"&gt;// myinterface.h&lt;/span&gt;

&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;QObject&amp;gt;&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;MyInterface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;Q_OBJECT&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="k"&gt;virtual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;myfunction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;signals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;onSomethingHappened&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="c1"&gt;// myimplementation.cpp&lt;/span&gt;

&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;QObject&amp;gt;&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;MyImplementation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MyInterface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;Q_OBJECT&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;virtual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;myfunction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ce serait bien si ça marchait, mais le &lt;em&gt;moc&lt;/em&gt; (Meta Object Compiler) ne veut 
pas compiler ça et dés qu'on veut faire un &lt;em&gt;connect()&lt;/em&gt; sur le signal ça coince.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/posts/20131112des-signaux-dans-une-classe-interface-avec-qt.html"&gt;Lire la suite…&lt;/a&gt; (Il reste encore 2 min. de lecture)&lt;/p&gt;&lt;/div&gt;</description><category>développement</category><category>qt5</category><category>tricks</category><guid>https://www.hardening-consulting.com/posts/20131112des-signaux-dans-une-classe-interface-avec-qt.html</guid><pubDate>Tue, 12 Nov 2013 14:54:51 GMT</pubDate></item><item><title>Passer des arguments à son platform integration plugin</title><link>https://www.hardening-consulting.com/posts/20130917passer-des-arguments-a-son-platform-integration-plugin.html</link><dc:creator>David FORT</dc:creator><description>&lt;p&gt;&lt;img class="alignright" alt="qt5" src="https://www.hardening-consulting.com/wp-content/uploads/2013/09/qt5-300x199.jpg" width="180" height="119"&gt;&lt;/p&gt;
&lt;p&gt;Alors les plus grognons me diront:&lt;/p&gt;
&lt;blockquote&gt;mais c'est quoi ton platform integration bidule là....&lt;/blockquote&gt;

&lt;p&gt;Alors un platform integration plugin, c'est le plugin qui permet de s'occuper d'une 
partie de du matériel sous Qt, ça permet entre autre de gérer la partie graphique (&lt;em&gt;xcb&lt;/em&gt;, 
&lt;em&gt;x11&lt;/em&gt;, &lt;em&gt;wayland&lt;/em&gt;) ou encore les méthodes d'entrée (heu là joker pour cette partie).&lt;/p&gt;
&lt;p&gt;Donc on a fait notre magnifique code de platform integration plugin, ça ressemble à ça:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;QFreeRdpIntegration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QPlatformIntegration&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;QFreeRdpIntegration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QStringList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;paramList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;QFreeRdpIntegration&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="cm"&gt;/** bla bla bla reste de la class */&lt;/span&gt;

&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On peut s'en servir avec une application en faisant un savant:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="gp"&gt;# &lt;/span&gt;mon_application&lt;span class="w"&gt; &lt;/span&gt;-platform&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;nom&lt;span class="w"&gt; &lt;/span&gt;de&lt;span class="w"&gt; &lt;/span&gt;mon&lt;span class="w"&gt; &lt;/span&gt;plugin&amp;gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;C'est super. En regardant de plus près, on se dit que &lt;em&gt;paramList&lt;/em&gt; serait vraiment très appétissant, 
pour passer des paramètres au plugin (vu le nom). Seulement voilà, la doc est plutôt muette à son sujet. 
On sait que c'est la liste des paramètres par contre pour savoir comment les passer à l'application.... Mystère !&lt;/p&gt;
&lt;p&gt;Après une bonne heure de recherche sur internet sur d'obscures mailing list Qt4 mobile (oui oui Qt4), 
je trouve l'incantation qui permet de lancer le sort:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="gp"&gt;# &lt;/span&gt;monapplication&lt;span class="w"&gt; &lt;/span&gt;-platform&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;nom&lt;span class="w"&gt; &lt;/span&gt;de&lt;span class="w"&gt; &lt;/span&gt;mon&lt;span class="w"&gt; &lt;/span&gt;plugin&amp;gt;:param1:param2
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Et on récupère &lt;em&gt;param1&lt;/em&gt;, &lt;em&gt;param2&lt;/em&gt; dans le tableau &lt;em&gt;paramList&lt;/em&gt;, c'est magique.&lt;/p&gt;
&lt;p&gt;Elle est pas belle la vie ?&lt;/p&gt;</description><category>integration plugin</category><category>qt5</category><category>tricks</category><guid>https://www.hardening-consulting.com/posts/20130917passer-des-arguments-a-son-platform-integration-plugin.html</guid><pubDate>Tue, 17 Sep 2013 19:49:57 GMT</pubDate></item></channel></rss>