<?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[komischer Fehler bei DLL-Prüfung]]></title><description><![CDATA[<p>hallo,<br />
ich teste mit einer Funktion, ob ein bestimmer Prozess eine bestimmte DLL geladen hat. Falls sie geladen ist, wird die BaseAddress ausgelesen. Nun ist das Problem, dass nicht richtig funktioniert. Das komische an dem Problem ist, dass es immer dann funktioniert, wenn ich oben zwei Messageboxen eingebaut habe, die die Parameter ausgeben (hatte ich zu Testzwecken eingebaut). Doch da diese Messageboxen im fertigen Programm nicht integriert sein sollen, müssen sie natürlich raus. Doch wenn ich das mache, bekomme ich einen falschen Wert von der Funktion zurückgeliefert. Wenn sie wieder eingebaut sind, geht wieder alles... <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>Hier die Funktion:</p>
<pre><code class="language-cpp">bool __fastcall Tmainform::checkdll(char* proc, char* dll)
{
	MessageBox(NULL, proc, &quot;Test&quot;, NULL);  &lt;--mit ihnen gehts, ohne sie nicht
	MessageBox(NULL, dll, &quot;Test&quot;, NULL);

	PROCESSENTRY32 pe32;
	MODULEENTRY32 me32;
	HANDLE thSnapshot, hModuleSnap;
	BOOL retval, error = true;

	thSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

	if(thSnapshot == INVALID_HANDLE_VALUE)
	{
		error = true;
	}

	pe32.dwSize = sizeof(PROCESSENTRY32);

	retval = Process32First(thSnapshot, &amp;pe32);

	while(retval)
	{
		if(strcmp(pe32.szExeFile, proc) == 0)
		{
			hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID);
			if(hModuleSnap == INVALID_HANDLE_VALUE )
			{
				error = true;
				break;
			}

			me32.dwSize = sizeof(MODULEENTRY32);

			if(!Module32First(hModuleSnap, &amp;me32))
			{
				CloseHandle(hModuleSnap);
				error = true;
				break;
			}

			do
  			{
				if(strcmp(me32.szModule, dll) == 0)
				{
					labelbase-&gt;Font-&gt;Color = clLime;
					char base[255] = &quot;&quot;;
					sprintf(base, &quot;DLLBaseAddress: %08X&quot;, me32.modBaseAddr);
					labelbase-&gt;Caption = base;
					error = false;
					break;
				}
			}
			while(Module32Next(hModuleSnap, &amp;me32));
			CloseHandle(hModuleSnap);
			break;
		}
		retval = Process32Next(thSnapshot,&amp;pe32);
		pe32.dwSize = sizeof(PROCESSENTRY32);
	}
	CloseHandle(thSnapshot);
	if(error)
	{
		labelbase-&gt;Font-&gt;Color = clRed;
		char base[255] = &quot;&quot;;
		sprintf(base, &quot;%s not injected!&quot;, dll);
		labelbase-&gt;Caption = base;
		return false;
	}
	else
	{
		return true;
	}
}
</code></pre>
<p>proc = zB &quot;notepad.exe&quot; &amp; dll = zB &quot;notepad.dll&quot;</p>
<p>Jemand ne Idee warum das nicht geht, wenn die Messageboxen weg sind??</p>
<p>Edit: Hab es jetzt anders gelöst. Hab die Messageboxen durch ein Sleep(0); ersetzt und es geht. Wenn ich das Sleep wieder rausnehme, geht die Funktion wieder nicht. Ich versteh nicht, warum sowas die Funktion zum Scheitern bringt.</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200917/komischer-fehler-bei-dll-prüfung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 01:38:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200917.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Dec 2007 12:45:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to komischer Fehler bei DLL-Prüfung on Fri, 21 Dec 2007 18:27:07 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich teste mit einer Funktion, ob ein bestimmer Prozess eine bestimmte DLL geladen hat. Falls sie geladen ist, wird die BaseAddress ausgelesen. Nun ist das Problem, dass nicht richtig funktioniert. Das komische an dem Problem ist, dass es immer dann funktioniert, wenn ich oben zwei Messageboxen eingebaut habe, die die Parameter ausgeben (hatte ich zu Testzwecken eingebaut). Doch da diese Messageboxen im fertigen Programm nicht integriert sein sollen, müssen sie natürlich raus. Doch wenn ich das mache, bekomme ich einen falschen Wert von der Funktion zurückgeliefert. Wenn sie wieder eingebaut sind, geht wieder alles... <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>Hier die Funktion:</p>
<pre><code class="language-cpp">bool __fastcall Tmainform::checkdll(char* proc, char* dll)
{
	MessageBox(NULL, proc, &quot;Test&quot;, NULL);  &lt;--mit ihnen gehts, ohne sie nicht
	MessageBox(NULL, dll, &quot;Test&quot;, NULL);

	PROCESSENTRY32 pe32;
	MODULEENTRY32 me32;
	HANDLE thSnapshot, hModuleSnap;
	BOOL retval, error = true;

	thSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

	if(thSnapshot == INVALID_HANDLE_VALUE)
	{
		error = true;
	}

	pe32.dwSize = sizeof(PROCESSENTRY32);

	retval = Process32First(thSnapshot, &amp;pe32);

	while(retval)
	{
		if(strcmp(pe32.szExeFile, proc) == 0)
		{
			hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID);
			if(hModuleSnap == INVALID_HANDLE_VALUE )
			{
				error = true;
				break;
			}

			me32.dwSize = sizeof(MODULEENTRY32);

			if(!Module32First(hModuleSnap, &amp;me32))
			{
				CloseHandle(hModuleSnap);
				error = true;
				break;
			}

			do
  			{
				if(strcmp(me32.szModule, dll) == 0)
				{
					labelbase-&gt;Font-&gt;Color = clLime;
					char base[255] = &quot;&quot;;
					sprintf(base, &quot;DLLBaseAddress: %08X&quot;, me32.modBaseAddr);
					labelbase-&gt;Caption = base;
					error = false;
					break;
				}
			}
			while(Module32Next(hModuleSnap, &amp;me32));
			CloseHandle(hModuleSnap);
			break;
		}
		retval = Process32Next(thSnapshot,&amp;pe32);
		pe32.dwSize = sizeof(PROCESSENTRY32);
	}
	CloseHandle(thSnapshot);
	if(error)
	{
		labelbase-&gt;Font-&gt;Color = clRed;
		char base[255] = &quot;&quot;;
		sprintf(base, &quot;%s not injected!&quot;, dll);
		labelbase-&gt;Caption = base;
		return false;
	}
	else
	{
		return true;
	}
}
</code></pre>
<p>proc = zB &quot;notepad.exe&quot; &amp; dll = zB &quot;notepad.dll&quot;</p>
<p>Jemand ne Idee warum das nicht geht, wenn die Messageboxen weg sind??</p>
<p>Edit: Hab es jetzt anders gelöst. Hab die Messageboxen durch ein Sleep(0); ersetzt und es geht. Wenn ich das Sleep wieder rausnehme, geht die Funktion wieder nicht. Ich versteh nicht, warum sowas die Funktion zum Scheitern bringt.</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1424391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1424391</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Fri, 21 Dec 2007 18:27:07 GMT</pubDate></item></channel></rss>