<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Martok&#039;s Place</title>
	<atom:link href="http://www.martoks-place.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.martoks-place.de</link>
	<description></description>
	<lastBuildDate>Sun, 07 Oct 2012 04:17:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Market heißt jetzt Play Store&#8230;</title>
		<link>http://www.martoks-place.de/2012/09/market-heist-jetzt-play-store/</link>
		<comments>http://www.martoks-place.de/2012/09/market-heist-jetzt-play-store/#comments</comments>
		<pubDate>Sun, 30 Sep 2012 21:52:41 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Computerkram]]></category>
		<category><![CDATA[Adam]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Market]]></category>
		<category><![CDATA[Play Store]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=714</guid>
		<description><![CDATA[&#8230; sonst ist alles wie zuvor. Wow, sogar den Reim gerettet. Und stimmt noch dazu, denn genau wie der Android Market filtert auch der Play Store nach seltsamen Kategorien, die bei manchen Geräten (hier: wieder das Notion Ink Adam) dazu führen dass nix angezeigt wird. Genau diesen Effekt hatte ich nun auch, nachdem ich den [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; sonst ist alles wie zuvor.</p>
<p>Wow, sogar den Reim gerettet. Und stimmt noch dazu, denn genau wie der Android Market filtert auch der Play Store nach seltsamen Kategorien, die bei manchen Geräten (hier: wieder das Notion Ink Adam) dazu führen dass nix angezeigt wird.</p>
<p>Genau diesen Effekt hatte ich nun auch, nachdem ich den nicht mehr funktionierenden Market auf <a href="http://www.androidpolice.com/2012/03/16/download-google-play-store-formerly-android-market-v3-5-15-apk-with-a-brand-new-my-apps-interface">Play Store</a> updated habe.</p>
<p>Kurze Sucherei führt dann zu <a href="http://www.tabletroms.com/forums/ice-cream-sandwich-adam/4990-%5Bhow-%5D-fix-play-store-compatibility-issues-lcd-density-modder-pro.html#post64366">dieser Anleitung</a>, die zumindest schonmal die richtige Spur bringt. &#8220;Seltsames Kriterium&#8221; des Tages ist diesmal nicht GPS, sondern die Display-Auflösung. Je nach DPI bekommt man andere Anwendungen (um z.B. Tablets und Phones auseinander zu halten). Wie üblich ist das etwas kaputt, deswegen müssen wir da nachhelfen.</p>
<p>Man suche&#038;installiere also <a href="https://play.google.com/store/apps/details?id=com.birdapi.android.dpipro">LCD Density Modder Pro</a> (Pro ist wichtig, nur da ist die wichtige Funktion drin). Unter &#8220;Fix Market Compatibility Issues&#8221; wählt man nun 240DPI (fragt nicht warum, hier hats geholfen), und lässt Modded Play Store und Modded Google Services Framework runterladen (letzteres ist für älter Android-Versionen nicht verfügbar, wird da allerdings auch nicht benötigt).<br />
Beides installiert man dann wie vorgeschlagen und führt auch den Reboot aus.</p>
<p>Danach dann das, was man schon kennt: in der Anwendungsverwaltung beim Play Store &#8220;Beenden&#8221; und &#8220;Daten löschen&#8221;, danach das gleiche noch beim Google Services Framework und noch einmal neu starten.</p>
<p>Danach sollte man den Store starten können (ggf aufpassen, dass das WLAN schon verbunden ist, sonst stolpert der beim ersten Start), neue Terms abnicken und alles sollte funktionieren.<br />
Bei mir jedenfalls ist alles wieder da, inklusive der sonst holprigen Maps-Anwendung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2012/09/market-heist-jetzt-play-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ach übrigens&#8230;</title>
		<link>http://www.martoks-place.de/2012/03/ach-ubrigens/</link>
		<comments>http://www.martoks-place.de/2012/03/ach-ubrigens/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 18:06:38 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Politik und Philosophie]]></category>
		<category><![CDATA[Real Life]]></category>
		<category><![CDATA[Politik]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=713</guid>
		<description><![CDATA[&#8230; wir haben einen neuen Bundespräsidenten. Als kleines Experiment habe ich heute den ganzen Tag weder RSS-Reader noch Twitterclient laufen gehabt, um mal auflaufen zu lassen was alles so kommuniziert wird. Das dann hinterher komprimiert zu lesen ist bei Großereignissen immer spannend, weil man Diskurse und Meinungsänderungen im Schwarm besser sieht. Und es ist nichts [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; wir haben einen neuen Bundespräsidenten.</p>
<p>Als kleines Experiment habe ich heute den ganzen Tag weder RSS-Reader noch Twitterclient laufen gehabt, um mal auflaufen zu lassen was alles so kommuniziert wird. Das dann hinterher komprimiert zu lesen ist bei Großereignissen immer spannend, weil man Diskurse und Meinungsänderungen im Schwarm besser sieht.</p>
<p>Und es ist nichts passiert.</p>
<p>Gar nichts.</p>
<p>Es hat nicht mal jemand das Ergebnis (G:991, K:126, E:108) RT&#8217;ed.</p>
<p>Ich glaube das sagt alles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2012/03/ach-ubrigens/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Blindgänger</title>
		<link>http://www.martoks-place.de/2012/03/blindganger/</link>
		<comments>http://www.martoks-place.de/2012/03/blindganger/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 03:13:44 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Fremdblogs]]></category>
		<category><![CDATA[Politik und Philosophie]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=712</guid>
		<description><![CDATA[Momentan schreiben wirklich alle an Geschichten aus Dystopia. Ich also auch. Wie fast jeden Abend war ich auch an diesem wieder auf dem Weg von meiner Wohnung in die Stammkneipe zwei Straßen weiter. Und wie fast jedes Mal frage ich mich, aus welchem Jahrhundert der Laden wohl seinen Namen geerbt hat &#8211; mit einem traditionellen [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://thoriumware.com/?p=489" title="Das Licht - Thoriumware">Momentan</a> schreiben <a href="http://blog.benny-baumann.de/?p=1187" title="Frustration der Verzweiflung - BenBE">wirklich alle</a> an <a href="http://teawork.de/zukunft/" title="Zukunft? - Teekeks">Geschichten aus Dystopia</a>.</p>
<p>Ich also auch.</p>
<p><span id="more-712"></span><br />
<hr/>
<p>Wie fast jeden Abend war ich auch an diesem wieder auf dem Weg von meiner Wohnung in die Stammkneipe zwei Straßen weiter. Und wie fast jedes Mal frage ich mich, aus welchem Jahrhundert der Laden wohl seinen Namen geerbt hat &#8211; mit einem traditionellen gastlichen Pub hatte &#8220;Johnny&#8217;s Pub&#8221; immerhin wenig zu tun. Von der Vernachlässigung in den Jahren nach dem Zusammenbruch hatte sich das ganze Viertel nie wieder so richtig erhohlt, aber wenige Etablissements haben sich das so erhalten. Offiziell natürlich war das alles so gedacht &#8211; hier wird auf rustikal gemacht. Nicht dass das irgendeinen der Gäste interessieren würde, die Meisten kommen hier aus der Gegend. Nur selten verirrt sich jemand aus der City hier her.</p>
<p>An einer Straßenkreuzung muss ich kurz warten: die Ampeln funktionieren noch wunderbar. Ich habe also etwas Zeit und sehe mich um. Auf fast jeder Hauswand prangt ein Werbebanner, alles Mögliche ist dabei: Mode, Autos, Versicherungen, Kredite, die neuesten Taser. Natürlich hängen hier schon seit Jahren keine Plakate mehr &#8211; viel zu unprofitabel. Und so blendet nur meine VEye ihre personalisierte Botschaft direkt auf meine Netzhaut. Schon erstaunlich: der einzige Wirtschaftszweig der gut überlebt hat ist ausgerechnet die Werbebranche aus den Zeiten des Web 2.0. Scheint wie mit Kakerlaken zu sein.<br />
Personalisiert hatte ich gesagt? Naja, so ist es gedacht. Aber nicht jeder kann sich das leisten, eine zusammenhängende Identität zu haben. Ich zum Beispiel nicht, das wäre geschäftsschädigend.</p>
<p>Wie bestellt meldet sich das Geschäft in Form eines leisen Klingelns in meinem linken Ohr. Mit der passenden Augengeste nehme ich den Anruf an.</p>
<p>Weißes Rauschen empfängt mich. Kurz fühle ich mich an die alten analogen Zeiten erinnert, bis mich die professionellen Reflexe einholen. Ich starte ein Cracker-Programm und füttere es mit dem Signal. Wenige Sekunden später meldet ein Pieps Erfolg und das Rauschen wird durch Stille ersetzt.</p>
<p>Ich räuspere mich.</p>
<p>Stille.</p>
<p>Dann eine Stimme: &#8220;Sie sind wirklich so gut, wie man sagt.&#8221; Naja, Hexenwerk war das nicht gerade&#8230; aber ich unterbreche nicht und konzentriere mich auf die Stimme.</p>
<p>&#8220;Sie haben es offenbar geschafft, meine Verschlüsselung zu knacken. Herzlichen Glückwunsch, das war der erste Test. Darf ich dann annehmen, dass wir ungestört sind?&#8221; Ich wusste sofort, worauf die Stimme hinaus wollte. Weniger klar war mir, wem sie gehörte &#8211; nicht hoch, nicht tief, kein auffälliges Timbre, nichts. Ich konnte nicht mal mit Sicherheit sagen, ob sie einer Frau oder einem Mann gehörte.</p>
<p>&#8220;Wer sind sie?&#8221;, fragte ich.<br />
&#8220;Das tut nichts zur Sache. Sie haben meine Frage nicht beantwortet.&#8221; Typisch. &#8220;Ja, sind wir. Starke Identitätsverschleierung, Wechsel alle 2 Sekunden, Dummy-Feed dazwischen. Gut genug jedenfalls, um die Werbebanner völlig aus dem Konzept zu bringen. Das Gespräch ist vertraulich.&#8221; <em>Vertraulichkeit</em>, das Motto unseres Berufsstandes. Oder auch <em>mit einem bein im Knast</em>, je nachdem wen man fragt.</p>
<p>&#8220;Wunderbar. Nennen sie mich Alice.&#8221; Die Stimme wechselte &#8211; jetzt eindeutig eine Frau. Da dürfte vorher wohl eine Menge Audioverarbeitung drin gewesen sein, die sie jetzt nicht mehr für notwendig hielt.</p>
<p>&#8220;Hallo, Alice. Ich bin Bob.&#8221; Lachen (wenn auch nervöses) am anderen Ende (ich mache mir schnell eine Notiz), dann spreche ich weiter. &#8220;Wie kann ich ihnen helfen?&#8221;<br />
&#8220;Die Sache ist etwas kompliziert&#8230;&#8221;<br />
&#8220;Sie glauben, ihr Mann betrügt sie?&#8221;, helfe ich aus. Man glaubt es kaum, aber Beziehungen sind immer noch der Arbeitsgarant für uns Privatermittler.</p>
<p>Entrüstung. &#8220;Glauben sie, dann würde ich den Aufwand hier treiben?&#8221; Guter Punkt. &#8220;Außerdem bin ich nicht mal verheiratet!&#8221; Oh, wie interessant. Und ich musste nicht einmal fragen! &#8220;Ich brauche Schutz.&#8221; Wie ein alter Freund das vor Jahren mal ausgedrückt hatte: &#8216;<em>mit diesen Worten wird dein Untergang beginnen</em>&#8216;.<br />
&#8220;Es tut mir Leid, aber ich bin Ermittler, kein Sicherheitsdienst.&#8221; Ich fange schon mit der Geste zum Auflegen an, da wird Alice panisch: &#8220;Nein, halt, warten sie! Ein Sicherheitsdienst ist keine Option&#8230; oder viel mehr Teil des Problems&#8230;&#8221; Da ist er, mein Untergang. Probleme mit einem der Dienste sind nie gut. Weder für die die sie haben noch für die, die sich einmischen.</p>
<p>Noch bevor ich antworten kann, spricht sie weiter. So schnell, dass ich fast Probleme habe mitzukommen: &#8220;Lassen sie mich das erklären. Ich habe nichts unrechtes getan, sondern die! Wir müssen uns treffen, ich bin hier nicht unbeobachtet.&#8221;<br />
Verdammte Moral. Jede Faser in mir will auflegen, aber mein Verstand sagt mir, dass ich sie unmöglich hängen lassen kann. Diese Frau hat wirklich Angst, das kann man nicht spielen.</p>
<p>In Gedanken verfluche ich mich, während ich sie Frage, ob sie das Johnny&#8217;s kennt. Sie stockt, und fragt mich ob ich das Johnny&#8217;s in &#8220;<em>diesem Viertel</em>&#8221; meine. Ja, ich tue. Und schiebe nach: &#8220;Die Gegend mag zwar ungemütlich aussehen, aber hier fällt jeder sofort auf der nicht hingehört. Man wird sie viel schlechter beschatten können.&#8221; Zögerlich stimmt sie zu, und wir verabreden uns für in einer Stunde.<br />
Sie legt auf.</p>
<p>Inzwischen ist die Ampel schon wieder 2 Grünphasen weiter und ich muss schon wieder warten. Vielleicht gar nicht schlecht, so kann ich mich noch etwas sortieren bevor ich im Pub ankomme. </p>
<p>Ich hole mir ein Bier und suche mir einen freien Tisch mit Blick auf die Tür.</p>
<p>Fast exakt zur vereinbarten Zeit hucht eine Gestalt zur Tür herein und blickt sich etwas hilflos um. Wäre sie nicht so auffällig nicht von hier, hätte man sie fast übersehen können. Aber wer hier im Blazer aufläuft fällt nun mal auf.</p>
<p>Ich stehe grade auf und will mich bemerkbar machen, als sie auch schon in meine Richtung läuft. Sie hat sich wirklich vorbereitet &#8211; nicht viele Leute wissen, wie ich aussehe. Oder viel mehr: nicht viele Leute wissen, dass ich <em>nicht</em> so aussehe wie in meiner elektronischen Visitenkarte.</p>
<p>&#8220;Alice.&#8221;, stelle ich fest.<br />
&#8220;Hallo, Bob.&#8221; Sie streckt mir ihre Hand entgegen und ich ergreife sie.</p>
<p>Wir setzen uns, sie bestellt einen Kaffee, ich rate ihr zu einem Tee (der ist immerhin nicht ganz so schlecht) und sieht sich vorsichtig um.</p>
<p>&#8220;Sie sagen, hier ist man sicherer? Kann ich mir kaum vorstellen, bei <em>den</em> Leuten hier.&#8221;<br />
Etwas gekränkt falle ich ihr ins Wort: &#8220;Hey, hier mag zwar nicht alles Schick sein, aber die Leute hier sind alle in Ordnung! Immerhin bin ich ja auch einer von <em>hier</em>!&#8221;<br />
Es ist ihr sichtlich peinlich, und schnell entschuldigt sie sich. &#8220;Es ist nur so&#8230; was ich beobachtet habe&#8230; es gibt Leute, die nicht wollen dass jemand davon erfährt.&#8221;<br />
Ich beruhige sie. &#8220;Keine Angst, wenn hier ein Fremder auftaucht, fällt der auf wie ein bunter Hund. So wie sie zum Beispiel.&#8221; Nicht ganz überzeugt sieht sie sich nochmal um und fängt dann doch an zu erzählen.</p>
<p>Zuerst von ihrem Job bei Eye2Eye, der zweitgrößten Werbeplattform.<br />
Dann von ihrem Problem.</p>
<p>Und was sie da erzählt, ist ungeheuerlich. Konzerne, die ihre Werbeslots nicht nur an Firmen vermieten, sondern unter der Hand auch &#8220;Nachrichtenoptimierung&#8221; anbieten. Mit der gleichen Technik, die virtuelle Banner auf reale Flächen malt werden Teile von Zeitungen, Fernsehbildern oder (für einen sehr hohen Preis) sogar der Realität ersetzt. Jeder VEye-Träger sieht also etwas anderes &#8211; das ganze kann sehr spezifisch gesteuert werden, um etwa einen einzelnen Beamten umzustimmen oder zu erreichen, dass ganze Bevölkerungsschichten einen anderen Zeitungsartikel sehen als der Journalist, der sie geschrieben hat.</p>
<p>Ungläubig frage ich dazwischen, wie sie denn davon erfahren hat. Statt zu antworten, nimmt sie die rechte VEye aus dem Auge und hält sie mir vor die Nase. Ich erkenne sofort den violetten Schimmer der Generation 3. Wahnsinnig teuer, aber außergewöhnliche Funktionen. Unter anderem Kommunikation mit der anderen Hälfte über das Hausnetz. &#8220;Ich hatte in einem Konferenzraum eine Linse verloren und das erst gemerkt, als ich nach der Mittagspause meinen Terminkalender aufrufen wollte. Ich habe also die Suchfunktion benutzt, um mir anzeigen zu lassen was diese VEye sieht. So soll man sie ja leichter finden können. Stattdessen gesehen habe ich aber etwas ganz anderes: eine Art Konferenz der Chefs der Top 10 im Werbegeschäft und einigen Größen aus der Industrie und Politik.&#8221; Noch nützlicher hatte sich das Lippenleseprogramm erwiesen, was zwar einige Probleme hatte, aber doch ein recht eindeutiges Ergebnis ergeben hat. Völlig automatisch hatte sie dann einen Snapshot in der Extended Memory-Funktion erstellt um das Gespräch festzuhalten.</p>
<p>Als sie bei diesem Teil ankommt, hat sie die Linse schon wieder im Auge und legt mir dafür einen Speicherchip in die Hand. &#8220;Das ist &#8211; &#8220;, frage ich. &#8220;Ja. Eine Kopie.&#8221; Ich hole mein Telefon aus der Tasche und kopiere die Daten schnell auf den internen Speicher, sicher ist sicher.</p>
<p>&#8220;Sie müssen mir helfen! Jemand muss mich gesehen haben, als ich hinterher meine VEye aus dem Konferenzraum geholt habe. Seitdem werde ich beobachtet.&#8221; Ich hake nach. &#8220;Von wem, können sie die Verfolger beschreiben?&#8221; &#8211; &#8220;Nicht direkt, nur das Auto: ein dunkelgrauer Miniv-&#8221;</p>
<p>Ihre Augen leuchten auf und sie erstarrt.</p>
<p>Klatsch &#8211; vornüber in die Tasse.</p>
<p>Tee verteilt sich auf dem Tisch und tropft an der Seite runter. Darauf schwimmen wie kleine Schiffchen zwei schwarze Kontaktlinsen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2012/03/blindganger/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ich, der Assembler</title>
		<link>http://www.martoks-place.de/2012/02/ich-der-assembler/</link>
		<comments>http://www.martoks-place.de/2012/02/ich-der-assembler/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 18:34:44 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Netzwerk]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=710</guid>
		<description><![CDATA[Was tut man mit einem Stück Closed-Source Software, was den einen Vorteil hat genau das zu tun was man will (und nicht mehr), aber leider den Nachteil regelmäßig abzustürzen? Und was tut man, wenn dieses Stück der KernelMode-Treiber einer Paketfilter-Firewall ist und &#8220;abstürzen&#8221; bedeutet dass man einen Bluescreen bekommt? Richtig, man holt WinDbg und IDA [...]]]></description>
			<content:encoded><![CDATA[<p>Was tut man mit einem Stück Closed-Source Software, was den einen Vorteil hat genau das zu tun was man will (und nicht mehr), aber leider den Nachteil regelmäßig abzustürzen?<br />
Und was tut man, wenn dieses Stück der KernelMode-Treiber einer Paketfilter-Firewall ist und &#8220;abstürzen&#8221; bedeutet dass man einen Bluescreen bekommt?</p>
<p>Richtig, man holt WinDbg und IDA raus und fängt an den Fehler zu suchen <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  <span id="more-710"></span>Dank ersterem bekommt man aus dem Crashdump (hier: Minidump) relativ schnell raus, wo der Fehler aufgetreten ist, und mit IDA bekommt man dann raus was dort passiert.<br />
In diesem Fall wird im TDI-Modul zuerst ein Eintrag in der Liste der verbundenen Anwendungen gesucht und dann später darauf gearbeitet. Das Funktioniert wunderbar, wenn man nur einen Kern hat (laut About-Dialog ist das Ding von 2002), aber sobald man mehr hat ist nicht mehr gesagt, dass ein gefundener Eintrag 20 Instruktionen weiter immer noch da ist. Konkret ist genau das hier passiert: ICMP-Pakete haben ja keine Connection, und dementsprechend ist ihr Eintrag sofort weg nachdem der Request erledigt ist. Alle 1000 Pakete (ungefähr) hat sich das dann so ausgewirkt, dass der eigentlich gefundene Eintrag schon wieder gelöscht war, als dann versucht wurde die gecachete MD5-Summe zu lesen.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #46aa03; font-weight: bold;">ecx</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #46aa03; font-weight: bold;">ebp</span><span style="color: #339933;">+</span>fname<span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #46aa03; font-weight: bold;">ecx</span>
<span style="color: #00007f; font-weight: bold;">call</span>    connection_by_fname
<span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #46aa03; font-weight: bold;">ebp</span><span style="color: #339933;">+</span>index<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #46aa03; font-weight: bold;">eax</span>
<span style="color: #00007f; font-weight: bold;">cmp</span>     <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #46aa03; font-weight: bold;">ebp</span><span style="color: #339933;">+</span>index<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">0FFFFFFFFh</span>        <span style="color: #666666; font-style: italic;">; index = -1 ?</span>
<span style="color: #00007f; font-weight: bold;">jz</span>      short newapp                   <span style="color: #666666; font-style: italic;">; unknown app</span>
<span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #46aa03; font-weight: bold;">ecx</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #46aa03; font-weight: bold;">ebp</span><span style="color: #339933;">+</span>len<span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #46aa03; font-weight: bold;">edx</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #46aa03; font-weight: bold;">ebp</span><span style="color: #339933;">+</span>index<span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #46aa03; font-weight: bold;">eax</span><span style="color: #339933;">,</span> P_conn_table
<span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #46aa03; font-weight: bold;">esi</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #46aa03; font-weight: bold;">eax</span><span style="color: #339933;">+</span><span style="color: #46aa03; font-weight: bold;">edx</span><span style="color: #339933;">*</span><span style="color: #ff0000;">4</span><span style="color: #339933;">+</span><span style="color: #ff0000;">11Ch</span><span style="color: #009900; font-weight: bold;">&#93;</span>          <span style="color: #666666; font-style: italic;">; Array-Zugriff: eax+11Ch, Element edx</span>
<span style="color: #00007f; font-weight: bold;">add</span>     <span style="color: #46aa03; font-weight: bold;">esi</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">1D8h</span>                      <span style="color: #666666; font-style: italic;">; cached md5 in esi+1D8h</span>
<span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #46aa03; font-weight: bold;">edi</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #46aa03; font-weight: bold;">ebp</span><span style="color: #339933;">+</span>md5buf<span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #46aa03; font-weight: bold;">edx</span><span style="color: #339933;">,</span> <span style="color: #46aa03; font-weight: bold;">ecx</span>                       <span style="color: #666666; font-style: italic;">; strncpy(edi,esi,ecx)</span>
<span style="color: #00007f; font-weight: bold;">shr</span>     <span style="color: #46aa03; font-weight: bold;">ecx</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">2</span>
<span style="color: #00007f; font-weight: bold;">rep</span> <span style="color: #b00040;">movsd</span>
<span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #46aa03; font-weight: bold;">ecx</span><span style="color: #339933;">,</span> <span style="color: #46aa03; font-weight: bold;">edx</span>
<span style="color: #00007f; font-weight: bold;">and</span>     <span style="color: #46aa03; font-weight: bold;">ecx</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">3</span>
<span style="color: #00007f; font-weight: bold;">rep</span> <span style="color: #00007f; font-weight: bold;">movsb</span>
<span style="color: #00007f; font-weight: bold;">xor</span>     <span style="color: #46aa03; font-weight: bold;">eax</span><span style="color: #339933;">,</span> <span style="color: #46aa03; font-weight: bold;">eax</span>
<span style="color: #00007f; font-weight: bold;">jmp</span>     exit</pre></td></tr></table></div>

<p>Was also tun? <a href="http://msdn.microsoft.com/en-us/library/windows/hardware/ff551917(v=vs.85).aspx" title="KeAcquireSpinLock">Locking geht an der Stelle nicht</a>, das quittiert uns Windows mit einem IRQL_NOT_LESS_OR_EQUAL &#8211; wie ich leidvoll erfahren musste, nachem ich das ganze Folgende mit diesem Ansatz durchexerziert hatte.</p>
<p>Möglichkeit zwei ist die weit weniger garantierte Möglichkeit einfach esi auf Null zu prüfen. Dann besteht zwar immer noch die Chance, zwischen dieser Prüfung und der Verwendung danach die Daten zu verlieren, aber das passiert anscheinend wesentlich seltener. Dazu müssen wir aber Code einfügen zwischen dem Array-Zugriff und der darauffolgenden Zeile, und zwar eigentlich nur das:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">test</span>    <span style="color: #46aa03; font-weight: bold;">esi</span><span style="color: #339933;">,</span><span style="color: #46aa03; font-weight: bold;">esi</span>
<span style="color: #00007f; font-weight: bold;">jz</span>      short newapp</pre></td></tr></table></div>

<p>. Leider ist da aber kein Platz (warum auch). Also durch die Binary gesucht und nach den bekannten Alignment-Blöcken gesucht. Die sind nur Füllstoff, da können wir also unseren eigenen Code unterbringen. Praktischerweise sind 12 Byte direkt hinter der problematischen Funktion verfügbar. Die kürzeste Lösung die mir eingefallen ist sieht so aus (der erste Teil steht nach dem Arrayzugriff, &#8220;space&#8221; ist der Füllblock):</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">TEST</span>    <span style="color: #46aa03; font-weight: bold;">esi</span><span style="color: #339933;">,</span><span style="color: #46aa03; font-weight: bold;">esi</span>
<span style="color: #00007f; font-weight: bold;">JZ</span>      newapp
<span style="color: #00007f; font-weight: bold;">CALL</span>    space
<span style="color: #339933;">...</span>
&nbsp;
space<span style="color: #339933;">:</span>
<span style="color: #00007f; font-weight: bold;">ADD</span>     <span style="color: #46aa03; font-weight: bold;">esi</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">1D8h</span>
<span style="color: #00007f; font-weight: bold;">MOV</span>     <span style="color: #46aa03; font-weight: bold;">edi</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #46aa03; font-weight: bold;">ebp</span><span style="color: #339933;">+</span><span style="color: #ff0000;">0Ch</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">RET</span></pre></td></tr></table></div>

<p>Und jetzt fangen die Probleme an.<br />
IDA kann zwar in Win32PE assemblieren, aber nicht für SYS-Dateien. Überhaupt hab ich keinen passenden Assembler gefunden, der sowas in-place kann. Also hab ich mich mit einem Hex-Editor (hier: Tiny Hexer) bewaffent und die passende Stelle im Code gesucht. War einfach, der CALL an connection_by_fname ist nur dort zu finden <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Weniger einfach war das Übersetzen des Codes in Bytecode nur mit Hilfe von <a href="http://ref.x86asm.net/coder32.html" title="ASM-Referenz">einer Referenz</a> &#8211; aber möglich, hier das was ich gebastelt hab:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #ff0000;">85</span> F6              <span style="color: #00007f; font-weight: bold;">TEST</span>    <span style="color: #46aa03; font-weight: bold;">esi</span><span style="color: #339933;">,</span><span style="color: #46aa03; font-weight: bold;">esi</span>
<span style="color: #ff0000;">74</span> 1A              <span style="color: #00007f; font-weight: bold;">JZ</span>      newapp
E8 A5 <span style="color: #ff0000;">00</span> <span style="color: #ff0000;">00</span> <span style="color: #ff0000;">00</span>     <span style="color: #00007f; font-weight: bold;">CALL</span>    space
<span style="color: #339933;">...</span>
&nbsp;
space<span style="color: #339933;">:</span>
<span style="color: #ff0000;">81</span> C6 D8 <span style="color: #ff0000;">01</span> <span style="color: #ff0000;">00</span> <span style="color: #ff0000;">00</span>  <span style="color: #00007f; font-weight: bold;">ADD</span>     <span style="color: #46aa03; font-weight: bold;">esi</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">1D8h</span>
8B 7D 0C           <span style="color: #00007f; font-weight: bold;">MOV</span>     <span style="color: #46aa03; font-weight: bold;">edi</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #46aa03; font-weight: bold;">ebp</span><span style="color: #339933;">+</span><span style="color: #ff0000;">0Ch</span><span style="color: #009900; font-weight: bold;">&#93;</span>
C3                 <span style="color: #00007f; font-weight: bold;">RET</span></pre></td></tr></table></div>

<p>Damit hab ich unten sogar noch 2 Byte übrig, und der Code oben passt genau in den gleichen Platz rein wie 2 Instruktionen, die ich dann weiter unten nachgebaut hab.<br />
Ein Call ohne Stackframebehandlung mag zwar seltsam aussehen, aber es erfüllt seinen Zweck und ist wesentlich kürzer als ein JMP/32, was hier leider nötig gewesen wäre: der Sprung ist A8h lang und damit zu weit für einen JMP/8 (der ja Vorzeichenbehaftet rechnet (was ich auch erst übersehen hatte)).</p>
<p>Oh und, eins noch: die Checksum im PE-Header muss unbedingt angepasst werden, sonst weigert sich Windows, den Treiber zu laden.</p>
<p>Somit hab ich jetzt wieder einen funktionierenden Paketfilter, auch wenn ich tausende von Pings versende <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2012/02/ich-der-assembler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nachschlag fürs Adam: Maps-API</title>
		<link>http://www.martoks-place.de/2012/01/nachschlag-adam-maps-api/</link>
		<comments>http://www.martoks-place.de/2012/01/nachschlag-adam-maps-api/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 23:57:27 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computerkram]]></category>
		<category><![CDATA[Adam]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Market]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=708</guid>
		<description><![CDATA[Ich hatte mich vor einiger Zeit schonmal darüber ausgelassen, dass im Standard-ROM vom Adam ein paar Sachen fehlen. Nun, wie ich beim Installieren (oder viel mehr dem Versuch des Installierens) von Goggles (hey, ein super Barcodescanner!) festgestellt habe, fehlt noch etwas: die komplette Maps-API. Sehr ärgerlich, zumal man das so nicht gesagt bekommt &#8211; stattdessen [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte mich <a href="/2011/10/market-ni-adam/" title="Einmal Market “mit alles” für’s Adam">vor einiger Zeit</a> schonmal darüber ausgelassen, dass im Standard-ROM vom Adam ein paar Sachen fehlen.</p>
<p>Nun, wie ich beim Installieren (oder viel mehr dem Versuch des Installierens) von Goggles (hey, ein super Barcodescanner!) festgestellt habe, fehlt noch etwas: die <a href="http://code.google.com/intl/de-DE/android/add-ons/google-apis/index.html">komplette Maps-API</a>. Sehr ärgerlich, zumal man das so nicht gesagt bekommt &#8211; stattdessen erscheint das berühmte &#8220;Nicht Installiert&#8221;-Fenster und man darf sich die Fehlermeldung aus dem logcat raussuchen.</p>
<p>Weiß man das dann aber, kann man ein wenig rumgooglen und findet eine sehr schöne Anleitung <a href="http://www.callum-macdonald.com/2011/02/06/missing-com-google-android-maps/">bei Callum Macdonald</a> (Wahnsinns Lebenslauf. Mein Traum!). Der Link zu den Dateien funktioniert mittlerweile nicht mehr, aber durch den Dateinamen bekommt man die mit etwas Fleißarbeit problemlos.</p>
<p>Und, wer das mit dem Read-Write-Mounten nicht hinbekommt: die in meinem oben verlinkten Beitrag erwähnte <em>update.zip</em> lässt sich leicht anpassen um genau diese zwei Dateien da zu platzieren wo sie hingehören. Nur enthält sie diesmal tatsächlich fremdes (nämlich Googles) Eigentum, die gibts also hier nicht zum Download. Ist immerhin Deutschland <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Aber wer das tun will, weiß sowieso wie man ein Zip-Tool bedient und updates einspielt&#8230;. hoffe ich doch <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Damit funktioniert jetzt einiges mehr: wenn auch nicht im Market auffindbar, so hat sich Goggles immerhin <a href="http://www.freewarelovers.com/android/app/google-goggles">per Sideload</a> installieren lassen.</p>
<p>So <a href="http://notionink.wordpress.com/2012/01/14/here-is-the-alpha/">kurz vor ICS</a> hab ich damit fast ein fertig eingerichtetes Froyo&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2012/01/nachschlag-adam-maps-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cold Restart</title>
		<link>http://www.martoks-place.de/2011/12/cold-restart/</link>
		<comments>http://www.martoks-place.de/2011/12/cold-restart/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 03:25:05 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Umzug]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=684</guid>
		<description><![CDATA[Der ein oder andere wird es vielleicht schon gemerkt haben: hier im Blog hat sich mal wieder was an der Oberfläche geändert. Aber nicht nur da Hier lief bis grade eben ein (jetzt kann ichs ja rausposaunen) sehr altes WordPress 2.8 mitsamt allen Sicherheitsproblemen die man sich da einhandelt. Was aber viel problematischer war: das [...]]]></description>
			<content:encoded><![CDATA[<p>Der ein oder andere wird es vielleicht schon gemerkt haben: hier im Blog hat sich mal wieder was an der Oberfläche geändert. Aber nicht nur da <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Hier lief bis grade eben ein (jetzt kann ichs ja rausposaunen) sehr altes WordPress 2.8 mitsamt allen Sicherheitsproblemen die man sich da einhandelt. Was aber viel problematischer war: das Theme war ein für WordPress 1.irgendwas angepasstes das schon seit einigen Jahren nur noch im hinterletzten Kompatiblilitätszweig lief. Und mit neueren WPs jetzt gar nicht mehr. Es musste also was neues her.<br />
<span id="more-684"></span><br />
Genau das ist in den letzten Tagen entstanden: ein neues Layout, diesmal nichts verändertes sondern komplett (aus Einzelteilen aus TwentyEleven) selbst zusammengebastelt. Im Endeffekt löst das aber das Problem nicht, sondern nur den komplizierten Teil.<br />
Durch alle Revisionen durch updaten wollte ich allerdings auch nicht, denn das hatte ich bisher schon gemacht und einiges an durcheinander in der Datenbank hinterlassen. Mal ganz davon abgesehen, dass die immer noch im Charset latin1 war &#8211; mehr als einmal ein Ärgernis. Also hilft eigentlich nur eins: eine komplette Neuinstallation. Genau das hat jetzt stattgefunden.</p>
<p>Das war der Plan:</p>
<ol>
<li>Dateien dynchronisieren: Beta->lokale Kopie</li>
<li>Dateien dynchronisieren: Live->lokale Kopie</li>
<li>Abgleichen der Uploads (das macht der Importer nämlich nicht zwingend richtig)</li>
<li>Baustellen-Seite vorschalten</li>
<li>DB-Export: Live-Schema</li>
<li>DB-Export: Beta-Schema</li>
<li>wp_ Tabellen auf Live-Schema löschen</li>
<li>Umbenennen des WordPress-Verzeichnisses auf dem Server</li>
<li>Import der Beta-Datenbank im Livesystem</li>
<li>Verschieben des Beta-Verzeichnisses ins Livesystem</li>
<li>Anpassen der Zugangsdaten in wp-config.php</li>
<li>Anpassen der Pfade im Backend</li>
<li>Baustellen-Seite wegnehmen</li>
</ol>
<p>Wider Erwarten hat das sogar fast alles funktioniert &#8211; jedenfalls bis ich mich anmelden wollte <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  An sich ging das alles, nur leider hatte jedes Formular eine falsche Zieladresse: nämlich eine vom Testsystem. Also den vorletzten Schritt direkt in der Datenbank erledigt und schon funktioniert alles.</p>
<p>Leider gibt&#8217;s das alte Besucherzählsystem (<em>Readers Count</em>) nicht mehr, und das jetzt verwendete <em>Count Per Day</em> hat ein so anderes Zählsystem, dass ich das nicht schmerzfrei übernommen kriege. Es gilt also: alles auf Anfang!</p>
<p>Anmerkungen, gefundene Fehler (und Behebungen) zum neuen Thema könnt ihr gerne mitteilen &#8211; entweder direkt oder in den Kommentaren.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/12/cold-restart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>They did it again&#8230;</title>
		<link>http://www.martoks-place.de/2011/12/they-did-it-again/</link>
		<comments>http://www.martoks-place.de/2011/12/they-did-it-again/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 21:29:32 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Heise]]></category>
		<category><![CDATA[Mailer]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=672</guid>
		<description><![CDATA[Was mich manchmal echt wundert &#8211; können sich manche Firmen eigentlich halten. Web.de ist so eine. Die einzigen Freemailer die überhaupt noch eine nennenswerte Postfachgrößenbeschränkung haben und größere Postfächer nur per Abofalle (siehe diverse Artikel in der c&#8217;t-Sparte &#8220;Vorsicht Kunde&#8221;) verkaufen haben jetzt wieder zugeschlagen. Im Rahmen einer lustigen Aktion bieten sie grade das an: [...]]]></description>
			<content:encoded><![CDATA[<p>Was mich manchmal echt wundert &#8211; können sich manche Firmen eigentlich halten. Web.de ist so eine. Die einzigen Freemailer die überhaupt noch eine nennenswerte Postfachgrößenbeschränkung haben und größere Postfächer nur per Abofalle (siehe diverse Artikel in der c&#8217;t-Sparte &#8220;Vorsicht Kunde&#8221;) verkaufen haben jetzt wieder zugeschlagen.</p>
<p>Im Rahmen einer lustigen Aktion bieten sie grade das an:</p>
<blockquote><p>der Speicher Ihres WEB.DE Postfachs wird ab sofort von 12 MB auf 500 MB erweitert. Das bedeutet 40 mal mehr Platz für Ihre E-Mails.</p></blockquote>
<p>Und damit nur noch ein 4tel statt ein 160stel der Konkurrenz im eigenen Haus!<br />
Aber darum gehts noch nicht.</p>
<blockquote><p>Zur Aktivierung des zusätzlichen E-Mail-Speichers, benötigen Sie eine Programmerweiterung, die Sie hier kostenlos und ohne Verpflichtungen herunterladen können. Bitte klicken Sie auf &#8220;Aktivieren&#8221;, um Ihr Postfach von 12 MB auf 500 MB kostenlos zu erweitern und die nötige Programmerweiterung zu installieren. </p></blockquote>
<p>War ja klar. Ich wusste gar nicht, dass ich Bundestrojanerzielperson bin.</p>
<p>Da mich das aber echt nervt, alle paar Tage das Postfach ausräumen zu müssen, also das einzig gangbare gemacht: neuen Windows-User ohne irgendwelche Rechte angelegt, mit dem ein neues Browserprofil gemacht, genau die Toobar installiert und einmal angemeldet. Danach alles entstandene gelöscht.</p>
<p>Und was erhalte ich 2 Sekunden Später in einer neuen Mail? Eine Werbefalle:<br />
<img src="/blog/wp-content/uploads/2011/12/wde2.png" alt="Web.de Werbemail 2" title="Web.de Werbemail 2" width="346" height="232" class="alignnone size-full wp-image-676" /> <img src="/blog/wp-content/uploads/2011/12/wde1.png" alt="Web.de Werbemail 1" title="Web.de Werbemail 1" width="262" height="214" class="alignnone size-full wp-image-673" /></p>
<p>Ja, richtig gelesen, da steht, ich würde nur im Club 500MByte bekommen. Kurz IMAP gefragt: nein, ist nicht so, ich hab schon 680960KByte (was übrigens 650MByte sind). Der unbedarfte Nutzer denkt sich jetzt &#8220;oh hey, nur noch ein Schritt den sie vorher nicht erwähnt haben, da steht ja immer noch Kostenlos dran&#8221;.<br />
Und schon zahlt man sich dumm und dusselig, denn wie wir gelernt haben ist das Ding nicht ohne Medien und/oder Gericht kündbar.</p>
<p>Gut, dass ich ein unbedarfter Nutzer bin &#8211; hoffentlich lesen das hier einige von diesen vorher.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/12/they-did-it-again/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Einmal Market &#8220;mit alles&#8221; für&#8217;s Adam</title>
		<link>http://www.martoks-place.de/2011/10/market-ni-adam/</link>
		<comments>http://www.martoks-place.de/2011/10/market-ni-adam/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 04:30:23 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computerkram]]></category>
		<category><![CDATA[Adam]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Market]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=658</guid>
		<description><![CDATA[Der Market von Android hat (neben einigem Carrier-Nerv) die an sich tolle Funktion, Software, die bestimmte Hardware als erforderlich markiert zu filtern, falls diese auf dem aktuellen Gerät nicht verügbar ist. Der Market (genau genommen der Server) prüft dann, ob diese existiert und entscheidet, ob ein Eintrag angezeigt wird oder nicht. Ich sage &#8220;an sich [...]]]></description>
			<content:encoded><![CDATA[<p>Der Market von Android hat (neben einigem Carrier-Nerv) die an sich tolle Funktion, Software, die bestimmte Hardware als erforderlich markiert zu filtern, falls diese auf dem aktuellen Gerät nicht verügbar ist. Der Market (genau genommen der Server) <a href="http://developer.android.com/reference/android/content/pm/PackageManager.html#getSystemAvailableFeatures%28%29">prüft dann</a>, ob diese existiert und entscheidet, ob ein Eintrag angezeigt wird oder nicht.</p>
<p>Ich sage &#8220;an sich toll&#8221;, weil das auch schiefgehen kann: nämlich dann, wenn das Gerät Hardware hat, die Market-App das aber nicht weiß. So ist es auf dem Notion Ink Adam mit Stock-ROM mit dem GPS &#8211; das führt dazu, dass jede Anwendung die GPS obligatorisch anfordert nicht sichtbar ist, obwohl die Hardware eigentlich verfügbar ist. Populäre Beispiele: GPS Info-Tools, Osmand, Dolphin HD und andere.</p>
<p><span id="more-658"></span></p>
<p>Eine kurze Recherche im Root-Dateisystem ergibt einen Ordner <em>/etc/permissions</em>. Dort liegt eine Hand voll XML-Dateien welche anwesende Hardware beschreiben. In der Datei <em>handheld_core_hardware.xml</em> finden sich dann Kommentare, welche beschreiben was man für GPS tun muss: eine Datei namens <em>android.hardware.location.gps.xml</em>. Da dieser Teil des Dateisystems normalerweise nicht lesbar ist, empfiehlt es sich, Änderungen hier nur per update.zip zu machen.</p>
<p>Da ich sowas noch nie gebaut habe, verwendete ich als Basis den <a href="http://tabletroms.com/index.php/2011/05/30/news/">Root-Hack von Tabletroms</a>. Aus dieser Datei hab ich alles unwichtige entfernt und lediglich das Skript übrig gelassen, welches Dateien extrahiert.</p>
<p><strong>Disclaimer: Ich übernehme keine Haftung für eventuelle Schäden oder Garantien für die Funktionsfähigkeit.</strong></p>
<p>Herausgekommen ist diese <a href="/blog/wp-content/uploads/2011/10/update.zip">update.zip</a>. Wie üblich:</p>
<ol>
<li>Kopieren des Updates auf SD-Karte</li>
<li>Adam runterfahren</li>
<li>Mit gedrücktem Vol+-Button anschalten</li>
<li>Entsprechende SD-Karte auswählen und bestätigen</li>
</ol>
<p>Es sollte kurz ein Fortschrittsbalken durchlaufen und das &#8220;Update&#8221; ist fertig.<br />
Um zu testen, ob alles geklappt hat kann (unabhängig vom Market) diese kleine <a href="/blog/wp-content/uploads/2011/10/featuretest.apk">Testanwendung</a> verwendet werden. In dieser Liste sollte das oben erwähnte Feature vorhanden sein.</p>
<p>Danach noch den Market dazu bringen, das auch anzuerkennen. Das Problem ist nämlich, dass diese Informationen vermutlich nur beim Authentifizieren gegenüber der Market-API übertragen werden. Es muss also ein neu-authentifizieren erzwungen werden. Bei mir ging das zufällig sofort (in einem zweiten Test später nicht), was aber immer hilft, ist diese sehr lange Prozedur:</p>
<ol>
<li>Anwendungen -> Alle</li>
<li>&#8220;Market&#8221; -> Stoppen erzwingen</li>
<li>&#8220;Google Services Framework&#8221; -> Stoppen erzwingen, Daten löschen</li>
<li>(Market sollte jetzt einen Fehler werfen beim Starten)</li>
<li>Das Adam neu starten</li>
<li>WLAN aktivieren und warten&#8230; möglichst lange. 20 Minuten oder sowas, immer mal übers Display wischen, damit&#8217;s nicht ins Standby geht. In dieser Zeit den Market nicht starten.</li>
<li>Market testen.</li>
<li>GOTO #1</li>
</ol>
<p>Die destruktive Variante davon: Auch die Daten der Market-App löschen &#8211; die Chance, dass es dann funktioniert, ist größer. Nachteil: man Verliert die Info über installierte Anwendungen. Es ist aber möglich, per Titanium Backup vorher die Daten zu sichern und dann im Anschluss zurückzuspielen. Es bleiben alle (GPS-)Apps verfügbar und man hat seine alte Liste wieder.</p>
<p>Grade der zweite Teil ist etwas spekulativ&#8230; diese Schritte sind auch in einem &#8220;Market-Fix&#8221; beschrieben, der aber bei mehreren Leuten nicht funktioniert. Ich bin mir nicht mal so sicher, ob die zusätzliche XML wirklich was ändert. Auf jeden Fall gehört sie da eigentlich hin&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/10/market-ni-adam/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Minecraft in spielbar</title>
		<link>http://www.martoks-place.de/2011/09/minecraft-in-spielbar/</link>
		<comments>http://www.martoks-place.de/2011/09/minecraft-in-spielbar/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 15:44:30 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Computerkram]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Minecraft]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=648</guid>
		<description><![CDATA[Seit heute gibt&#8217;s das inoffizielle 1.9-Prerelease. Und wieder mal ist Minecraft 20% langsamer geworden, jetzt bin ich bei 7fps. Nicht spielbar also. Wie gut also, dass es Leute wie sp614x gibt, die sich mal die Mühe gemacht haben und notch&#8217;s Gefrickel etwas aufräumen. Ergebnis des ganzen ist OptiFine, ein Mod, der bei mir Wunder bewirkt [...]]]></description>
			<content:encoded><![CDATA[<p>Seit heute gibt&#8217;s das inoffizielle 1.9-Prerelease. Und wieder mal ist Minecraft 20% langsamer geworden, jetzt bin ich bei 7fps. Nicht spielbar also.</p>
<p>Wie gut also, dass es Leute wie sp614x gibt, die sich mal die Mühe gemacht haben und notch&#8217;s Gefrickel etwas aufräumen. Ergebnis des ganzen ist <a href="http://www.minecraftforum.net/topic/249637-173-optifine-hd-g-fps-boost/">OptiFine</a>, ein Mod, der bei mir Wunder bewirkt hat. Noch ist der leider nicht auf 1.8 (und erst recht nicht auf 1.9) portiert, aber die Ergebnisse bei 1.7.3 sprechen für sich.</p>
<p><a href="/blog/wp-content/uploads/2011/09/acraft-stadt.png"><img src="/blog/wp-content/uploads/2011/09/acraft-stadt-300x154.png" alt="acraft-stadt" title="Das Testbild" width="300" height="154" style="float:right" class="size-medium wp-image-651" /></a><br />
Als &#8220;Testbild&#8221; hab ich die Aussicht von meinem Dachausgang über die Hauptstadt auf der Map von <a href="http://forum.akaikee.de/index.php">ACraft</a> genommen. Normalerweise bekomme ich hier nur auf &#8220;Short&#8221; eine spielbare Framerate von um die 20fps. Mit OptiFine kann ich problemlos &#8220;Far&#8221; verwenden, denn hier bekomme ich statt 10fps glatte 25fps!</p>
<p>Sollte ein ähnlicher Effekt auch messbar sein, wenn der Mod auf 1.9 portiert wurde, könnte man fast sagen: Minecraft wird spielbar <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Jetzt heißt es nur noch: warten auf eine neue Version. Keine Ahnung, wie schnell der Programmierer ist, aber selbst Bukkit haben ja <a href="http://forums.bukkit.org/threads/recommended-build-1185.37830/">nun 2 Wochen gebraucht</a>. Könnte also noch eine Weile dauern&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/09/minecraft-in-spielbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trust in Me!</title>
		<link>http://www.martoks-place.de/2011/08/trust-me/</link>
		<comments>http://www.martoks-place.de/2011/08/trust-me/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 01:10:34 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Hack]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=630</guid>
		<description><![CDATA[Nehmen wir mal an, ein (Delphi-)object, welches eine Liste gleicher Objekte verwalten soll. Man könnte das einen Baum nennen. TValueList = array of TValue; TValue = object FList: TValueList; SomeOtherStuff: integer; end; (Für später geborene: das ist die alte Syntax für &#8220;record mit Methoden&#8221;.) Leider nimmt uns der Compiler das so nicht ab. Warum? Weil [...]]]></description>
			<content:encoded><![CDATA[<p>Nehmen wir mal an, ein (Delphi-)<strong>object</strong>, welches eine Liste gleicher Objekte verwalten soll. Man könnte das einen Baum nennen.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="delphi" style="font-family:monospace;">  TValueList <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">array</span> <span style="color: #000000; font-weight: bold;">of</span> TValue<span style="color: #000066;">;</span>
  TValue <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">object</span>
    FList<span style="color: #000066;">:</span> TValueList<span style="color: #000066;">;</span>
    SomeOtherStuff<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">integer</span><span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></pre></td></tr></table></div>

<p>(Für später geborene: das ist die alte Syntax für &#8220;record mit Methoden&#8221;.)</p>
<p>Leider nimmt uns der Compiler das so nicht ab. Warum? Weil TValue natürlich vorher noch nicht bekannt ist. Und im Gegensatz zu Klassen kann man Records nicht vorwärtsdeklarieren. Wie also könnten wir dieses Problem lösen? Man könnte Pointer verwenden, und bei Verwendung entsprechend erzeugen. Aber freigeben? Es gibt ja keinen Destructor, also keine Option. Man könnte das gesamte Objekt in eine Klassen-Instanz verwandeln, die von IUnknown die Referenzzählung erbt. Das ist aber wesentlich mehr Aufwand als das bisherige &#8220;Deklarieren und Verwenden&#8221;.</p>
<p>Die Lösung hier zeigt sich in einem fiesen, aber einfachen Hack:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="delphi" style="font-family:monospace;">TValueListAlias <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">array</span> <span style="color: #000000; font-weight: bold;">of</span> <span style="color: #000066; font-weight: bold;">boolean</span><span style="color: #000066;">;</span>
TValue <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">object</span>
  FList<span style="color: #000066;">:</span> TValueListAlias<span style="color: #000066;">;</span>
  SomeOtherStuff<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">integer</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
TValueList <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">array</span> <span style="color: #000000; font-weight: bold;">of</span> TValue<span style="color: #000066;">;</span></pre></td></tr></table></div>

<p>Dabei spielt es keine Rolle, welchen Basistypen man für das Alias verwendet. Es muss sich nur um ein dynamisches Array handeln. Jetzt kann man in jedem Zugriff auf das eigentliche TValueList casten und alles funktioniert. Dabei kann man die Hässlichkeiten wunderbar in Zugriffsmethoden verbergen.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="delphi" style="font-family:monospace;"><span style="color: #000066;">SetLength</span><span style="color: #000066;">&#40;</span>TValueList<span style="color: #000066;">&#40;</span>FList<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> <span style="color: #0000ff;">42</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></pre></td></tr></table></div>

<p>Das funktioniert auch, aber wenn TValue nun Felder die finialisiert werden müssen enthält, wird sich FastMM beschweren, dass eben diese nie freigegeben werden. Es stellt sich heraus, dass SetLength zwar den BaseType richtig speichert und auch in @DynArrayClear exakt diesen wieder beräumt, aber Felder im Gegensatz zu Variablen nicht damit, sondern mit FinalizeArray freigegeben werden. Und dieses richtet sich nach der Deklaration, nicht nach dem was wirklich passiert.</p>
<p>Hier kommt dann der eigentliche Grund für diesen Beitrag: wir sagen der RTL einfach: &#8220;Vertrau mir, das ist ein anderer Datentyp!&#8221;. Mit anderen Worten: wir patchen die Feld-Tabelle der betroffenen Klasse so, dass FinalizeArray dort ein TValueList (BaseType also TValue, nicht unser Dummy von weiter oben) sieht und dieses korrekt finalisiert.</p>
<p>Das ist zunächst einfacher als gedacht:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="delphi" style="font-family:monospace;">TI<span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValue<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
FT <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066; font-weight: bold;">Pointer</span><span style="color: #000066;">&#40;</span><span style="color: #000066; font-weight: bold;">Integer</span><span style="color: #000066;">&#40;</span>TI<span style="color: #000066;">&#41;</span> <span style="color: #000066;">+</span> <span style="color: #000066; font-weight: bold;">Byte</span><span style="color: #000066;">&#40;</span>TI<span style="color: #000066;">.</span><span style="color: #006600;">Name</span><span style="color: #000066;">&#91;</span><span style="color: #0000ff;">0</span><span style="color: #000066;">&#93;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">for</span> I <span style="color: #000066;">:</span><span style="color: #000066;">=</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Count</span><span style="color: #000066;">-</span><span style="color: #0000ff;">1</span> <span style="color: #000000; font-weight: bold;">downto</span> <span style="color: #0000ff;">0</span> <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #000000; font-weight: bold;">begin</span>
  <span style="color: #000000; font-weight: bold;">if</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Fields</span><span style="color: #000066;">&#91;</span>I<span style="color: #000066;">&#93;</span><span style="color: #000066;">.</span><span style="color: #006600;">TypeInfo</span><span style="color: #000066;">^</span> <span style="color: #000066;">=</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValueListAlias<span style="color: #000066;">&#41;</span> <span style="color: #000000; font-weight: bold;">then</span>
    ppti<span style="color: #000066;">:</span><span style="color: #000066;">=</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Fields</span><span style="color: #000066;">&#91;</span>I<span style="color: #000066;">&#93;</span><span style="color: #000066;">.</span><span style="color: #006600;">TypeInfo</span><span style="color: #000066;">^</span><span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValueList<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></pre></td></tr></table></div>

<p>Nur &#8211; das funktioniert so nicht <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Runtime Error 216 ist die Folge einer Exception beim Schreiben der neuen TypeInfo. Da hat nämlich mal jemand mitgedacht und die dazugehörige Seite als PAGE_EXECUTE_READ markiert. Was man zum Glück in seinem eigenen Prozess beliebig ändern kann, und so ergibt sich (mit allen Deklarationen) folgendes Meisterwerk:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="delphi" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">procedure</span> FixFieldTable<span style="color: #000066;">&#40;</span>TheRecord<span style="color: #000066;">,</span> Find<span style="color: #000066;">,</span> Replace<span style="color: #000066;">:</span> PTypeInfo<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">type</span>
  TFieldInfo <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">packed</span> <span style="color: #000000; font-weight: bold;">record</span>
    TypeInfo<span style="color: #000066;">:</span> PPTypeInfo<span style="color: #000066;">;</span>
    Offset<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Cardinal</span><span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
&nbsp;
  PFieldTable <span style="color: #000066;">=</span> <span style="color: #000066;">^</span>TFieldTable<span style="color: #000066;">;</span>
  TFieldTable <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">packed</span> <span style="color: #000000; font-weight: bold;">record</span>
    X<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Word</span><span style="color: #000066;">;</span>
    Size<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Cardinal</span><span style="color: #000066;">;</span>
    Count<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Cardinal</span><span style="color: #000066;">;</span>
    Fields<span style="color: #000066;">:</span> <span style="color: #000000; font-weight: bold;">array</span> <span style="color: #000066;">&#91;</span><span style="color: #0000ff;">0</span><span style="color: #000066;">..</span><span style="color: #0000ff;">0</span><span style="color: #000066;">&#93;</span> <span style="color: #000000; font-weight: bold;">of</span> TFieldInfo<span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">var</span>
  FT<span style="color: #000066;">:</span> PFieldTable<span style="color: #000066;">;</span>
  ppti<span style="color: #000066;">:</span> PPTypeInfo<span style="color: #000066;">;</span>
  I<span style="color: #000066;">,</span> old<span style="color: #000066;">,</span> dummy<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">cardinal</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">begin</span>
  FT <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066; font-weight: bold;">Pointer</span><span style="color: #000066;">&#40;</span><span style="color: #000066; font-weight: bold;">Integer</span><span style="color: #000066;">&#40;</span>TheRecord<span style="color: #000066;">&#41;</span> <span style="color: #000066;">+</span> <span style="color: #000066; font-weight: bold;">Byte</span><span style="color: #000066;">&#40;</span>TheRecord<span style="color: #000066;">.</span><span style="color: #006600;">Name</span><span style="color: #000066;">&#91;</span><span style="color: #0000ff;">0</span><span style="color: #000066;">&#93;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">for</span> I <span style="color: #000066;">:</span><span style="color: #000066;">=</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Count</span><span style="color: #000066;">-</span><span style="color: #0000ff;">1</span> <span style="color: #000000; font-weight: bold;">downto</span> <span style="color: #0000ff;">0</span> <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #000000; font-weight: bold;">begin</span>
    <span style="color: #000000; font-weight: bold;">if</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Fields</span><span style="color: #000066;">&#91;</span>I<span style="color: #000066;">&#93;</span><span style="color: #000066;">.</span><span style="color: #006600;">TypeInfo</span><span style="color: #000066;">^</span> <span style="color: #000066;">=</span> Find <span style="color: #000000; font-weight: bold;">then</span> <span style="color: #000000; font-weight: bold;">begin</span>
      ppti<span style="color: #000066;">:</span><span style="color: #000066;">=</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Fields</span><span style="color: #000066;">&#91;</span>I<span style="color: #000066;">&#93;</span><span style="color: #000066;">.</span><span style="color: #006600;">TypeInfo</span><span style="color: #000066;">;</span>
      VirtualProtect<span style="color: #000066;">&#40;</span>ppti<span style="color: #000066;">,</span><span style="color: #000066;">SizeOf</span><span style="color: #000066;">&#40;</span>ppti<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> PAGE_READWRITE<span style="color: #000066;">,</span> old<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
      <span style="color: #000000; font-weight: bold;">try</span>
        ppti<span style="color: #000066;">^</span><span style="color: #000066;">:</span><span style="color: #000066;">=</span> Replace<span style="color: #000066;">;</span>
      <span style="color: #000000; font-weight: bold;">finally</span>
        VirtualProtect<span style="color: #000066;">&#40;</span>ppti<span style="color: #000066;">,</span> <span style="color: #000066;">sizeof</span><span style="color: #000066;">&#40;</span>ppti<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> old<span style="color: #000066;">,</span> dummy<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
      <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
    <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
<span style="color: #808080; font-style: italic;">{...}</span>
&nbsp;
  FixFieldTable<span style="color: #000066;">&#40;</span><span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValue<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValueListAlias<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValueList<span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></pre></td></tr></table></div>

<p>Wer sich die Datenstruktur ansieht, wird feststellen dass TFieldTable ein Feld namens &#8220;Size&#8221; enthält. Sollten wir das nicht anpassen? Die einfache Antwort ist: nein! In TValue selbst wird vom dynamischen Array nur ein Pointer auf den Anfang gespeichert, und der ist unabhängig vom genauen Aussehen des Arrays immer gleich groß: nämlich 32bit oder 4 Byte. Es ändert sich also nichts.<br />
Außerdem praktisch: da SetLength den Array-Typ anlegt, den man ihm übergibt (und wir ja auf TValueList casten), werden auch untergeordnete Arrays als das freigegeben was in ihnen steckt.</p>
<p>Das funktioniert so bis mindestens BDS2006, ich kann mir aber vorstellen dass die neuen RTTI-Strukturen in XE hier einige Änderungen notwendig machen. Das müssen dann aber andere testen <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Oh, übrigens, wer es nicht erkannt hat: der Titel ist natürlich eine Referenz auf <a href="http://en.wikipedia.org/wiki/Trust_in_Me_%28The_Python%27s_Song%29">Disney&#8217;s Dschungelbuch</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/08/trust-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
