<?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[Assembler Funktion aufrufen, Fehler]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich nehme mir grade das Assembler &quot;Buch&quot; von Paul Carter vor (NASM), stoße nun beim kompilieren aber auf einige Probleme, bei denen ich selber nicht weiter komme.<br />
ich habe die Datei first.asm, welche eine Funktion asm_main beinhaltet in der zwei Integer-Werte addiert werden. Soweit lässt sich alles einwandfrei kompilieren...<br />
Nun habe ich im Visual Studio ein neues Projekt aufgemacht und habe eine Datei<br />
cdecl.h</p>
<pre><code>#ifndef CDECL_HEADER_FILE
#define CDECL_HEADER_FILE

#if defined(__GNUC__)
#  define PRE_CDECL
#  define POST_CDECL __attribute__((cdecl))
#else
#  define PRE_CDECL __cdecl
#  define POST_CDECL
#endif

#endif
</code></pre>
<p>und driver.cpp</p>
<pre><code>#include &quot;cdecl.h&quot;

int PRE_CDECL asm_main() POST_CDECL;

int main()
{
	int ret_status;
	ret_status = asm_main();
	return ret_status;
}
</code></pre>
<p>Folgender Fehler taucht nun auf:<br />
Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;int __cdecl asm_main(void)&quot; (?asm_main@@YAHXZ)&quot; in Funktion &quot;_main.</p>
<p>Ich nehme mal an die first.obj oder asm_io.obj werden nicht gelinkt, wodurch der Compiler vermutlich denkt die Funktion asm_main() wäre deklariert aber nicht definiert... Weiß jemand wie ich das im Visual Studio realisieren kann? Würde nur ungern über die cmd kompilieren!</p>
<p>LG WildChild</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337611/assembler-funktion-aufrufen-fehler</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 23:25:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337611.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Apr 2016 12:08:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 12:08:03 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich nehme mir grade das Assembler &quot;Buch&quot; von Paul Carter vor (NASM), stoße nun beim kompilieren aber auf einige Probleme, bei denen ich selber nicht weiter komme.<br />
ich habe die Datei first.asm, welche eine Funktion asm_main beinhaltet in der zwei Integer-Werte addiert werden. Soweit lässt sich alles einwandfrei kompilieren...<br />
Nun habe ich im Visual Studio ein neues Projekt aufgemacht und habe eine Datei<br />
cdecl.h</p>
<pre><code>#ifndef CDECL_HEADER_FILE
#define CDECL_HEADER_FILE

#if defined(__GNUC__)
#  define PRE_CDECL
#  define POST_CDECL __attribute__((cdecl))
#else
#  define PRE_CDECL __cdecl
#  define POST_CDECL
#endif

#endif
</code></pre>
<p>und driver.cpp</p>
<pre><code>#include &quot;cdecl.h&quot;

int PRE_CDECL asm_main() POST_CDECL;

int main()
{
	int ret_status;
	ret_status = asm_main();
	return ret_status;
}
</code></pre>
<p>Folgender Fehler taucht nun auf:<br />
Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;int __cdecl asm_main(void)&quot; (?asm_main@@YAHXZ)&quot; in Funktion &quot;_main.</p>
<p>Ich nehme mal an die first.obj oder asm_io.obj werden nicht gelinkt, wodurch der Compiler vermutlich denkt die Funktion asm_main() wäre deklariert aber nicht definiert... Weiß jemand wie ich das im Visual Studio realisieren kann? Würde nur ungern über die cmd kompilieren!</p>
<p>LG WildChild</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493156</guid><dc:creator><![CDATA[WildChild]]></dc:creator><pubDate>Thu, 14 Apr 2016 12:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 12:46:47 GMT]]></title><description><![CDATA[<p>Es muss noch das name mangling mit extern &quot;C&quot; unterbunden werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493161</guid><dc:creator><![CDATA[name mangling]]></dc:creator><pubDate>Thu, 14 Apr 2016 12:46:47 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 12:59:37 GMT]]></title><description><![CDATA[<p>Das habe ich schon ausprobiert, ändert aber leider nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493164</guid><dc:creator><![CDATA[WildChild]]></dc:creator><pubDate>Thu, 14 Apr 2016 12:59:37 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 13:05:55 GMT]]></title><description><![CDATA[<p>Guck doch mal in die generierten Objektdateien, welche Funktionen importiert und exportiert werden. Ich vermute, der Compiler lässt _asm_main importieren, also mit Unterstrich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493165</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Thu, 14 Apr 2016 13:05:55 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 13:29:35 GMT]]></title><description><![CDATA[<p>Okay, ich habe nun in die first.obj und die driver.obj geguckt in beiden taucht jeweils einmal _asm_main auf.<br />
Ich kenne mich mit obj Dateien nun wirklich nicht aus, habe da ehrlich gesagt noch nie reingeguckt. Daher weiß ich auch nicht, welche Stellen für den Im- oder Export stehen. Aber wie schon gesagt die einzigen Vorkommen sind mit Unterstrich vor dem asm.<br />
Wenn ich nun in meiner driver.cpp den Unterstrich hinzufüge ändert das aber leider auch nichts...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493168</guid><dc:creator><![CDATA[WildChild]]></dc:creator><pubDate>Thu, 14 Apr 2016 13:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 14:05:15 GMT]]></title><description><![CDATA[<p>Das scheint ja jetzt eher ein IDE als ein C++ Problem zu sein ...</p>
<p>Werden die asm aus der IDE heraus übersetzt?<br />
Was hast du unternommen, um die obj Datei zu linken?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493169</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 14 Apr 2016 14:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 14:09:50 GMT]]></title><description><![CDATA[<p>Wenn in <code>driver</code>  <code>_asm_main</code> importiert wird, hänge an den Symbolnamen <code>asm_main</code> in der asm-Datei auch noch nen Unterstrich dran.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493170</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Thu, 14 Apr 2016 14:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 15:40:54 GMT]]></title><description><![CDATA[<p>1. asm_main muss in der Cpp mit extern &quot;C&quot; deklariert sein<br />
2. deine asm_main muss in der asm-File ein _-Präfix haben (da der msvc das vor jede C-Funktion klatscht)<br />
3. deine Funktion muss in der asm-File als global markiert sein</p>
<p>Wenn das alles nicht hilft, musst du mal mehr Infos schicken (nasm-Commandline, asm-Code, ggf. noch den dumpbin-Output und evtl. noch deine link-Commandline)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493178</guid><dc:creator><![CDATA[JulianH]]></dc:creator><pubDate>Thu, 14 Apr 2016 15:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 16:05:18 GMT]]></title><description><![CDATA[<p>JulianH schrieb:</p>
<blockquote>
<p>1. asm_main muss in der Cpp mit extern &quot;C&quot; deklariert sein<br />
2. deine asm_main muss in der asm-File ein _-Präfix haben (da der msvc das vor jede C-Funktion klatscht)<br />
3. deine Funktion muss in der asm-File als global markiert sein</p>
<p>Wenn das alles nicht hilft, musst du mal mehr Infos schicken (nasm-Commandline, asm-Code, ggf. noch den dumpbin-Output und evtl. noch deine link-Commandline)</p>
</blockquote>
<p>Die punkte 1-3 sind zutreffend. die asm habe ich wie folgt kompiliert: nasm -f win32 first.asm<br />
Die obj-Files anschließend in meinen VS Projektordner und soweit ich weiß sollte das Visual Studio sich die selber ziehen. Oder muss ich diese extra linken? Dann liegt es nämlich daran.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493180</guid><dc:creator><![CDATA[WildChild]]></dc:creator><pubDate>Thu, 14 Apr 2016 16:05:18 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 17:13:50 GMT]]></title><description><![CDATA[<p>WildChild schrieb:</p>
<blockquote>
<p>Oder muss ich diese extra linken? Dann liegt es nämlich daran.</p>
</blockquote>
<p>Ja!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493188</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 14 Apr 2016 17:13:50 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 17:28:23 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>WildChild schrieb:</p>
<blockquote>
<p>Oder muss ich diese extra linken? Dann liegt es nämlich daran.</p>
</blockquote>
<p>Ja!</p>
</blockquote>
<p>Und wo linkt man im Visual Studio obj-Files?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493189</guid><dc:creator><![CDATA[WildChild]]></dc:creator><pubDate>Thu, 14 Apr 2016 17:28:23 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 17:33:23 GMT]]></title><description><![CDATA[<p>Ich hab die obj-Files einfach zum Projekt hinzugefügt laut google ist das genau das was ich suche...<br />
Die bisherige Fehlermeldung verschwindet dadurch auch, jedoch erscheinen nun Neue.<br />
Nicht aufgelöstes externes Symbol _scanf und _printf in asm_io.obj</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493190</guid><dc:creator><![CDATA[WildChild]]></dc:creator><pubDate>Thu, 14 Apr 2016 17:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 17:37:11 GMT]]></title><description><![CDATA[<p>Ich vermute mal, die Funktionsnamem der crt sind auch durch die Mangel gedreht worden, daher erstelle im C++-Modul eine 'myprintf' oder so, die dann vom asm-modul aufgerufen wird und diese das printf der crt aufruft (bzw vsprintf). Nicht vergessen, extern C drumherum zu wickeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493192</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Thu, 14 Apr 2016 17:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 18:44:22 GMT]]></title><description><![CDATA[<p>Also liegts an der asm_io?<br />
Ich kann bisher so gut wie gar kein Assembler, habe erst heute mit dem Buch angefangen. Und in diesem Buch wird immer auf die vom Autor mitgelieferte asm_io zurückgegriffen... Also ich hab keine Ahnung wie ich nun im Assembler Code auf eine in C geschriebene myprintf zugreifen kann....<br />
Vielleicht kann mir ja auch jemand ein gutes Tutorial oder Buch sagen bei dem ich nicht auf irgendwelche mitgelieferten (und möglicherweise veralteten oder fehlerhaften) libraries o. ä. zugreifen muss?<br />
Mir geht es eigentlich im Speziellen darum, inline Assembler oder durch solche Treiberfunktionen geladene asm-Files zu schreiben. Keinen reinen Assembler Code. Daher wäre die asm_io ohnehin unnötig. Eingabe/Ausgabe würde für mich eh über C/C++ gemacht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493196</guid><dc:creator><![CDATA[WildChild]]></dc:creator><pubDate>Thu, 14 Apr 2016 18:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to Assembler Funktion aufrufen, Fehler on Thu, 14 Apr 2016 21:04:35 GMT]]></title><description><![CDATA[<p>Was sind &quot;solche Treiberfunktionen&quot; <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="😕"
    /></p>
<p>Was inline Assembler angeht...<br />
Inline Assembler ist compilerspezifisch (d.h. nicht portierbar). Und Visual Studio unterstützt Inline Assembler nur für x86, nicht für ARM und auch nicht für x64. Aber davon abgesehen, für Visual C++ sollten sich super-einfach super-einfache Beispiele ergoogeln lassen.</p>
<p>Bzw. fang mal hier an und lies dich durch die verschiedenen Abschnitte/Themen:<br />
<a href="https://msdn.microsoft.com/en-us/library/4ks26t93.aspx" rel="nofollow">https://msdn.microsoft.com/en-us/library/4ks26t93.aspx</a></p>
<p>WildChild schrieb:</p>
<blockquote>
<p>Also liegts an der asm_io?<br />
(...)<br />
Daher wäre die asm_io ohnehin unnötig. Eingabe/Ausgabe würde für mich eh über C/C++ gemacht werden.</p>
</blockquote>
<p>Dann link das asm_io Object einfach nicht dazu. Sollte reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2493204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2493204</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 Apr 2016 21:04:35 GMT</pubDate></item></channel></rss>