<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[STL mit unsigned chars und WriteProcessMemory]]></title><description><![CDATA[<p>Ich möchte eine kette von unsigned chars mit Hilfe von 'STL' bzw 'std' speichern.<br />
z.B.: <strong>&quot;\x8A\x8D\xAC\x00\x00\x00&quot;</strong> Das ganze sind Opcodes nicht zu verwechseln mit einem String oder signed chars. Es ist also wichtig das der Typ unsigned char ist.</p>
<p>Die unsigned chars sollen so abgespeichert werden das ich dabei NICHT die Größe eines Array oder die nötigen Bytes dafür angeben muss. (Deswegen STL)</p>
<p>Am Ende soll es möglich sein das ganze an WriteProcessMemory() zu übergeben als *sourcebuffer*.</p>
<p>Ich habe bisher std::string probiert jedoch funtkioniert das nicht. Problem dabei war das &quot;\x90&quot; nicht als einzelner char geschrieben wird sondern als 4 chars. Sprich WriteProcessMemory() hat mir Datenmüll in den anderen Prozess geschrieben:<br />
anstatt '\x90' was dem opcode für No Operation entspricht wurde '\','x','9','0' geschrieben.</p>
<p>mein Idee war jetzt:</p>
<pre><code>std::vector &lt;unsigned char&gt; opcode;
opcode.push_back(&quot;\x8A\x8D\xAC\x00\x00\x00&quot;); // error C2664: 'std::vector&lt;_Ty&gt;::push_back' : cannot convert parameter 1 from 'const char [7]' to 'const unsigned char &amp;'
</code></pre>
<p>... funktioniert allerding nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Kann mir jemand sagen wie ich das richtig mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223737/stl-mit-unsigned-chars-und-writeprocessmemory</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 19:18:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223737.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Sep 2008 13:08:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL mit unsigned chars und WriteProcessMemory on Tue, 30 Sep 2008 13:08:25 GMT]]></title><description><![CDATA[<p>Ich möchte eine kette von unsigned chars mit Hilfe von 'STL' bzw 'std' speichern.<br />
z.B.: <strong>&quot;\x8A\x8D\xAC\x00\x00\x00&quot;</strong> Das ganze sind Opcodes nicht zu verwechseln mit einem String oder signed chars. Es ist also wichtig das der Typ unsigned char ist.</p>
<p>Die unsigned chars sollen so abgespeichert werden das ich dabei NICHT die Größe eines Array oder die nötigen Bytes dafür angeben muss. (Deswegen STL)</p>
<p>Am Ende soll es möglich sein das ganze an WriteProcessMemory() zu übergeben als *sourcebuffer*.</p>
<p>Ich habe bisher std::string probiert jedoch funtkioniert das nicht. Problem dabei war das &quot;\x90&quot; nicht als einzelner char geschrieben wird sondern als 4 chars. Sprich WriteProcessMemory() hat mir Datenmüll in den anderen Prozess geschrieben:<br />
anstatt '\x90' was dem opcode für No Operation entspricht wurde '\','x','9','0' geschrieben.</p>
<p>mein Idee war jetzt:</p>
<pre><code>std::vector &lt;unsigned char&gt; opcode;
opcode.push_back(&quot;\x8A\x8D\xAC\x00\x00\x00&quot;); // error C2664: 'std::vector&lt;_Ty&gt;::push_back' : cannot convert parameter 1 from 'const char [7]' to 'const unsigned char &amp;'
</code></pre>
<p>... funktioniert allerding nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Kann mir jemand sagen wie ich das richtig mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590869</guid><dc:creator><![CDATA[bockwurst]]></dc:creator><pubDate>Tue, 30 Sep 2008 13:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to STL mit unsigned chars und WriteProcessMemory on Tue, 30 Sep 2008 13:11:20 GMT]]></title><description><![CDATA[<p>bockwurst schrieb:</p>
<blockquote>
<p>Die unsigned chars sollen so abgespeichert werden das ich dabei NICHT die Größe eines Array oder die nötigen Bytes dafür angeben muss. (Deswegen STL)</p>
</blockquote>
<p>Wie soll dann das Ende der Kette erkannt werden? Oder hat die Kette immer eine feste Länge?</p>
<blockquote>
<p>Ich habe bisher std::string probiert jedoch funtkioniert das nicht. Problem dabei war das &quot;\x90&quot; nicht als einzelner char geschrieben wird sondern als 4 chars.</p>
</blockquote>
<p>Dann machst Du was falsch (TM). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code>std::vector &lt;unsigned char&gt; opcode;
opcode.push_back('\x8A');
opcode.push_back('\x8D');
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1590873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590873</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 30 Sep 2008 13:11:20 GMT</pubDate></item><item><title><![CDATA[Reply to STL mit unsigned chars und WriteProcessMemory on Tue, 30 Sep 2008 13:46:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie soll dann das Ende der Kette erkannt werden? Oder hat die Kette immer eine feste Länge?</p>
</blockquote>
<p>Die Größe der Kette ist unterschiedlich. Zur Not könnte ich die Anzahl der Bytes angeben. Ich will es aber um jeden Preis vermeiden.</p>
<pre><code>std::vector &lt;unsigned char&gt; opcode;
opcode.push_back('\x8A');
opcode.push_back('\x8D');
...
</code></pre>
<p>Gibt es keine Möglichkeit die Kette in Form von &quot;\x01\x02\x03\04...&quot; zu übergeben?</p>
<p>Das ist meine Version ohne STL, die gefällt mir nicht, ist mir zu umständlich:</p>
<pre><code>// vereinachte Version, ist bei mir bissl komlizierter das einiger in einer Klasse liegt
unsigned long bytes=6;
unsigned char *opcodes;
opcodes=new unsigned char[bytes];
memcpy(opcodes,&quot;\x8A\x8D\xAC\x00\x00\x00&quot;,bytes);
// ... jede Menge anderer Code ...
WriteProcessMemory(hproc, (LPVOID)addr, (LPVOID)opcodes, bytes, 0)
</code></pre>
<p>Müsste es nicht möglich sein das STL die Anzahl der übergeben Bytes erkennt. Ich weiß nicht genau wie das bei std::string mit .append(&quot;sometext&quot;); funktioniert - aber eigentlich übergebe ich ja dort auch keine 0. oder!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590894</guid><dc:creator><![CDATA[bockwurst]]></dc:creator><pubDate>Tue, 30 Sep 2008 13:46:17 GMT</pubDate></item><item><title><![CDATA[Reply to STL mit unsigned chars und WriteProcessMemory on Tue, 30 Sep 2008 13:50:12 GMT]]></title><description><![CDATA[<p>bockwurst schrieb:</p>
<blockquote>
<p>...Ich habe bisher std::string probiert jedoch funtkioniert das nicht. Problem dabei war das &quot;\x90&quot; nicht als einzelner char geschrieben wird sondern als 4 chars. ...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Da bin ich aber ziemlich sicher, dass das klappt ... <em>wenn</em> man es denn richtig macht.<br />
Aber ein wesentlicher Vorteil von std::string ist die enge Anbindung an &quot;0-terminierte char*&quot; ... und da klappt halt Vieles nicht mehr mit Binärdaten.<br />
Deswegen muss man sich halt überlegen, ob std::string wirklich die Passendste Wahl ist.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590897</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 30 Sep 2008 13:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to STL mit unsigned chars und WriteProcessMemory on Tue, 30 Sep 2008 17:23:38 GMT]]></title><description><![CDATA[<p>Also mit std::string kann man das knicken, gibt zu viele Probleme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591070</guid><dc:creator><![CDATA[bockwurst]]></dc:creator><pubDate>Tue, 30 Sep 2008 17:23:38 GMT</pubDate></item><item><title><![CDATA[Reply to STL mit unsigned chars und WriteProcessMemory on Wed, 01 Oct 2008 05:12:45 GMT]]></title><description><![CDATA[<p>Mit dem range-insert oder einem back_inserter kannst Du eine ganze Kette übergeben. Da ein Vector aber keine Kenntnis von nullterminierten Strings hat, musst Du die Länge hier mit übergeben. Das geht am einfachsten so (Achtung: rawdata <strong>muss</strong> ein Array, kein Zeiger, sein):</p>
<pre><code class="language-cpp">// irgendwo
static char const rawdata[] = &quot;\x8A\x8D\xAC\x00\x00\x00&quot;;

...

opcode.insert(opcode.end(), rawdata, rawdata + sizeof rawdata / sizeof *rawdata - 1); // - 1 deshalb, weil dem Array noch ein weiteres \x00 durch den Compiler hinzugefügt wurde.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1591198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591198</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 01 Oct 2008 05:12:45 GMT</pubDate></item></channel></rss>