<?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[Eigenartiger Code]]></title><description><![CDATA[<p>Hi!</p>
<p>was macht dieser code genau?</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;
#include &lt;direct.h&gt;
#include &lt;ntsecapi.h&gt;

#define UNICODE
#define _UNICODE

typedef HINSTANCE (WINAPI *mytype_LoadLibraryA)(LPCTSTR);
typedef BOOL (WINAPI *mytype_FreeLibrary)(HMODULE);
typedef FARPROC (WINAPI *mytype_GetProcAddress)(HMODULE, LPCTSTR);
typedef FARPROC (WINAPI *mytype_Function)(char *);

OSVERSIONINFO osver;

typedef struct _addr_data
{
	LPVOID load_library;
	LPVOID free_library;
	LPVOID get_address;
	char  lib_name[256];
	char lib_function[256];
	char argument[1024];
} addr_data, *paddr_data;

extern &quot;C&quot;
{
NTSYSAPI
NTAPI
NtQuerySystemInformation (
	DWORD i,
    OUT PVOID SystemInformation,
    IN ULONG SystemInformationLength,
    OUT PULONG ReturnLength OPTIONAL
    );
} 

typedef LONG KPRIORITY;

typedef struct _SYSTEM_PROCESS_INFORMATION {
    ULONG NextEntryOffset;
    ULONG NumberOfThreads;
    LARGE_INTEGER SpareLi1;
    LARGE_INTEGER SpareLi2;
    LARGE_INTEGER SpareLi3;
    LARGE_INTEGER CreateTime;
    LARGE_INTEGER UserTime;
    LARGE_INTEGER KernelTime;
    UNICODE_STRING ImageName;
    KPRIORITY BasePriority;
    HANDLE UniqueProcessId;
    HANDLE InheritedFromUniqueProcessId;
    ULONG HandleCount;
    ULONG SpareUl2;
    ULONG SpareUl3;
    ULONG PeakVirtualSize;
    ULONG VirtualSize;
    ULONG PageFaultCount;
    ULONG PeakWorkingSetSize;
    ULONG WorkingSetSize;
    ULONG QuotaPeakPagedPoolUsage;
    ULONG QuotaPagedPoolUsage;
    ULONG QuotaPeakNonPagedPoolUsage;
    ULONG QuotaNonPagedPoolUsage;
    ULONG PagefileUsage;
    ULONG PeakPagefileUsage;
    ULONG PrivatePageCount;
} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;

DWORD GetProcessIdByName(char * procname)
{
	DWORD id;
	BOOL bo;
	ULONG l,size,shift,interval,k;
	BYTE * buffer;
	SYSTEM_PROCESS_INFORMATION proc;
	char name[256];
	char tempname[256]; 

	memmove(tempname,procname,256);

	id=0;
	l=0;
	size=20000;
	while(size&lt;=1000000)
	{
		buffer=(BYTE *)malloc(size);
		memset(buffer,0x00,size);
		bo=NtQuerySystemInformation(5,buffer,size,&amp;l);
		if(bo==0) break;
		free(buffer);
		size=size+20000;
	}
	if(l==0)
	{
		printf(&quot;Can't get process information\n&quot;);
		return 0;
	}
	shift=0;
	interval=1;
	while(shift&lt;l &amp;&amp; interval!=0)
	{
		memset(&amp;proc,0x00,sizeof(SYSTEM_PROCESS_INFORMATION));
		memmove(&amp;proc,buffer+shift,sizeof(SYSTEM_PROCESS_INFORMATION));
		memset(name,0x00,256);
		k=WideCharToMultiByte(CP_ACP,0,proc.ImageName.Buffer,(-1),name,256,NULL,NULL);

		if(strncmp(_strupr(name),_strupr(tempname),256)==0)
		{
			id=(DWORD)proc.UniqueProcessId;
			break;
		}

		interval=*(DWORD *)(buffer+shift);
		shift=interval+shift;
	}

	free(buffer);
	return id;
}

LPVOID data_pointer;
LPVOID data_pointer1;

mytype_LoadLibraryA my_LoadLibraryA;		//address for LoadLibraryA
mytype_FreeLibrary my_FreeLibrary;		//address for LoadLibraryA
mytype_GetProcAddress my_GetProcAddress;	//address for GetProcAddress

static void WINAPI my_function(void * address)
{
HINSTANCE hmod;
mytype_Function address1;
paddr_data my_addr_data;

mytype_LoadLibraryA my1_LoadLibraryA;
mytype_FreeLibrary my1_FreeLibrary;
mytype_GetProcAddress my1_GetProcAddress;

my_addr_data=(paddr_data)address;
my1_LoadLibraryA=(mytype_LoadLibraryA)((LPCTSTR)(my_addr_data-&gt;load_library));
my1_FreeLibrary=(mytype_FreeLibrary)((LPCTSTR)(my_addr_data-&gt;free_library));;
hmod=my1_LoadLibraryA((LPCTSTR)(my_addr_data-&gt;lib_name));
if(hmod!=0)
{
	my1_GetProcAddress=(mytype_GetProcAddress)((LPCTSTR)my_addr_data-&gt;get_address);
	address1=(mytype_Function)my1_GetProcAddress(hmod,(LPCTSTR)(my_addr_data-&gt;lib_function));
	if(address1!=0)
	{
		address1(my_addr_data-&gt;argument);
	}
}

my1_FreeLibrary(hmod);
}

static void WINAPI my_function_end(void * address)
{
}

int main(int argc, TCHAR** argv) 
{
  DWORD TargetPID;
  DWORD TargetTID=NULL;
  HANDLE hProcess, hmod;
  int j=0;
LPVOID pointer;
PVOID intruderaddress;
BOOL bo;
DWORD threadlength;
addr_data my_data;
ULONG l;
HINSTANCE hint;
char filename[1024];
char buff[1024];

memset(filename,0x00,1024);
memset(buff,0x00,1024);

//Get system version 
	memset(&amp;osver,0x00,sizeof(OSVERSIONINFO));
	osver.dwOSVersionInfoSize =sizeof(OSVERSIONINFO);
	bo=GetVersionEx(&amp;osver);

	if(osver.dwMajorVersion==5)	//Win2000
	{
		TargetPID=GetProcessIdByName(&quot;explorer.exe&quot;);
		if(TargetPID==0) return (-1);
	}
	else return (-1);

hint=LoadLibrary((LPCTSTR)&quot;kernel32.dll&quot;);

memset(my_data.lib_name,0x00,256);
memset(my_data.lib_function,0x00,256);

my_data.load_library=GetProcAddress(hint,&quot;LoadLibraryA&quot;);
my_data.free_library=GetProcAddress(hint,&quot;FreeLibrary&quot;);
my_data.get_address=GetProcAddress(hint,&quot;GetProcAddress&quot;);

strncpy(my_data.lib_name,&quot;c:\\pure_lib.dll&quot;,256);	//path for dll for execution

	strncpy(my_data.lib_function,&quot;function1&quot;,256);	//function name in dll
	_getcwd(my_data.argument,240);
	strncat(my_data.argument,&quot;\\123.321&quot;,8);		//argument for function

threadlength=(PBYTE)&amp;my_function_end-(PBYTE)&amp;my_function;

l=0;
hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,TargetPID);
if(hProcess==0) return (-1);
l=GetLastError();
pointer=VirtualAllocEx(hProcess,0,threadlength,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(pointer==NULL)
{
	printf(&quot;Can't allocate memory for thread in process space\n&quot;);
	return 1;
}

data_pointer=VirtualAllocEx(hProcess,0,sizeof(addr_data),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(pointer==NULL)
{
	printf(&quot;Can't allocate memory for thread data in process space\n&quot;);
	return 1;
}

intruderaddress=&amp;my_function;
bo=WriteProcessMemory(hProcess,pointer,intruderaddress,threadlength,&amp;l);
if(bo==NULL)
{
	printf(&quot;Can't write thread in process space\n&quot;);
	return 1;
}

bo=WriteProcessMemory(hProcess, data_pointer,&amp;my_data,sizeof(addr_data),&amp;l);
if(bo==NULL)
{
	printf(&quot;Can't write thread data in process space\n&quot;);
	return 1;
}

hmod=CreateRemoteThread(hProcess, NULL, threadlength, (unsigned long (__stdcall *)(void *))pointer, data_pointer, 0, &amp;l);
l=WaitForSingleObject(hmod,2000);

	  CloseHandle(hmod);
      if(hProcess) CloseHandle(hProcess);

	  return 1;
}
</code></pre>
<p>bekomme leider ein: main.cpp(36) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int<br />
was heisst das?</p>
<p>cu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197351/eigenartiger-code</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 23:05:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197351.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Nov 2007 13:53:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigenartiger Code on Fri, 09 Nov 2007 13:53:00 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>was macht dieser code genau?</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;
#include &lt;direct.h&gt;
#include &lt;ntsecapi.h&gt;

#define UNICODE
#define _UNICODE

typedef HINSTANCE (WINAPI *mytype_LoadLibraryA)(LPCTSTR);
typedef BOOL (WINAPI *mytype_FreeLibrary)(HMODULE);
typedef FARPROC (WINAPI *mytype_GetProcAddress)(HMODULE, LPCTSTR);
typedef FARPROC (WINAPI *mytype_Function)(char *);

OSVERSIONINFO osver;

typedef struct _addr_data
{
	LPVOID load_library;
	LPVOID free_library;
	LPVOID get_address;
	char  lib_name[256];
	char lib_function[256];
	char argument[1024];
} addr_data, *paddr_data;

extern &quot;C&quot;
{
NTSYSAPI
NTAPI
NtQuerySystemInformation (
	DWORD i,
    OUT PVOID SystemInformation,
    IN ULONG SystemInformationLength,
    OUT PULONG ReturnLength OPTIONAL
    );
} 

typedef LONG KPRIORITY;

typedef struct _SYSTEM_PROCESS_INFORMATION {
    ULONG NextEntryOffset;
    ULONG NumberOfThreads;
    LARGE_INTEGER SpareLi1;
    LARGE_INTEGER SpareLi2;
    LARGE_INTEGER SpareLi3;
    LARGE_INTEGER CreateTime;
    LARGE_INTEGER UserTime;
    LARGE_INTEGER KernelTime;
    UNICODE_STRING ImageName;
    KPRIORITY BasePriority;
    HANDLE UniqueProcessId;
    HANDLE InheritedFromUniqueProcessId;
    ULONG HandleCount;
    ULONG SpareUl2;
    ULONG SpareUl3;
    ULONG PeakVirtualSize;
    ULONG VirtualSize;
    ULONG PageFaultCount;
    ULONG PeakWorkingSetSize;
    ULONG WorkingSetSize;
    ULONG QuotaPeakPagedPoolUsage;
    ULONG QuotaPagedPoolUsage;
    ULONG QuotaPeakNonPagedPoolUsage;
    ULONG QuotaNonPagedPoolUsage;
    ULONG PagefileUsage;
    ULONG PeakPagefileUsage;
    ULONG PrivatePageCount;
} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;

DWORD GetProcessIdByName(char * procname)
{
	DWORD id;
	BOOL bo;
	ULONG l,size,shift,interval,k;
	BYTE * buffer;
	SYSTEM_PROCESS_INFORMATION proc;
	char name[256];
	char tempname[256]; 

	memmove(tempname,procname,256);

	id=0;
	l=0;
	size=20000;
	while(size&lt;=1000000)
	{
		buffer=(BYTE *)malloc(size);
		memset(buffer,0x00,size);
		bo=NtQuerySystemInformation(5,buffer,size,&amp;l);
		if(bo==0) break;
		free(buffer);
		size=size+20000;
	}
	if(l==0)
	{
		printf(&quot;Can't get process information\n&quot;);
		return 0;
	}
	shift=0;
	interval=1;
	while(shift&lt;l &amp;&amp; interval!=0)
	{
		memset(&amp;proc,0x00,sizeof(SYSTEM_PROCESS_INFORMATION));
		memmove(&amp;proc,buffer+shift,sizeof(SYSTEM_PROCESS_INFORMATION));
		memset(name,0x00,256);
		k=WideCharToMultiByte(CP_ACP,0,proc.ImageName.Buffer,(-1),name,256,NULL,NULL);

		if(strncmp(_strupr(name),_strupr(tempname),256)==0)
		{
			id=(DWORD)proc.UniqueProcessId;
			break;
		}

		interval=*(DWORD *)(buffer+shift);
		shift=interval+shift;
	}

	free(buffer);
	return id;
}

LPVOID data_pointer;
LPVOID data_pointer1;

mytype_LoadLibraryA my_LoadLibraryA;		//address for LoadLibraryA
mytype_FreeLibrary my_FreeLibrary;		//address for LoadLibraryA
mytype_GetProcAddress my_GetProcAddress;	//address for GetProcAddress

static void WINAPI my_function(void * address)
{
HINSTANCE hmod;
mytype_Function address1;
paddr_data my_addr_data;

mytype_LoadLibraryA my1_LoadLibraryA;
mytype_FreeLibrary my1_FreeLibrary;
mytype_GetProcAddress my1_GetProcAddress;

my_addr_data=(paddr_data)address;
my1_LoadLibraryA=(mytype_LoadLibraryA)((LPCTSTR)(my_addr_data-&gt;load_library));
my1_FreeLibrary=(mytype_FreeLibrary)((LPCTSTR)(my_addr_data-&gt;free_library));;
hmod=my1_LoadLibraryA((LPCTSTR)(my_addr_data-&gt;lib_name));
if(hmod!=0)
{
	my1_GetProcAddress=(mytype_GetProcAddress)((LPCTSTR)my_addr_data-&gt;get_address);
	address1=(mytype_Function)my1_GetProcAddress(hmod,(LPCTSTR)(my_addr_data-&gt;lib_function));
	if(address1!=0)
	{
		address1(my_addr_data-&gt;argument);
	}
}

my1_FreeLibrary(hmod);
}

static void WINAPI my_function_end(void * address)
{
}

int main(int argc, TCHAR** argv) 
{
  DWORD TargetPID;
  DWORD TargetTID=NULL;
  HANDLE hProcess, hmod;
  int j=0;
LPVOID pointer;
PVOID intruderaddress;
BOOL bo;
DWORD threadlength;
addr_data my_data;
ULONG l;
HINSTANCE hint;
char filename[1024];
char buff[1024];

memset(filename,0x00,1024);
memset(buff,0x00,1024);

//Get system version 
	memset(&amp;osver,0x00,sizeof(OSVERSIONINFO));
	osver.dwOSVersionInfoSize =sizeof(OSVERSIONINFO);
	bo=GetVersionEx(&amp;osver);

	if(osver.dwMajorVersion==5)	//Win2000
	{
		TargetPID=GetProcessIdByName(&quot;explorer.exe&quot;);
		if(TargetPID==0) return (-1);
	}
	else return (-1);

hint=LoadLibrary((LPCTSTR)&quot;kernel32.dll&quot;);

memset(my_data.lib_name,0x00,256);
memset(my_data.lib_function,0x00,256);

my_data.load_library=GetProcAddress(hint,&quot;LoadLibraryA&quot;);
my_data.free_library=GetProcAddress(hint,&quot;FreeLibrary&quot;);
my_data.get_address=GetProcAddress(hint,&quot;GetProcAddress&quot;);

strncpy(my_data.lib_name,&quot;c:\\pure_lib.dll&quot;,256);	//path for dll for execution

	strncpy(my_data.lib_function,&quot;function1&quot;,256);	//function name in dll
	_getcwd(my_data.argument,240);
	strncat(my_data.argument,&quot;\\123.321&quot;,8);		//argument for function

threadlength=(PBYTE)&amp;my_function_end-(PBYTE)&amp;my_function;

l=0;
hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,TargetPID);
if(hProcess==0) return (-1);
l=GetLastError();
pointer=VirtualAllocEx(hProcess,0,threadlength,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(pointer==NULL)
{
	printf(&quot;Can't allocate memory for thread in process space\n&quot;);
	return 1;
}

data_pointer=VirtualAllocEx(hProcess,0,sizeof(addr_data),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(pointer==NULL)
{
	printf(&quot;Can't allocate memory for thread data in process space\n&quot;);
	return 1;
}

intruderaddress=&amp;my_function;
bo=WriteProcessMemory(hProcess,pointer,intruderaddress,threadlength,&amp;l);
if(bo==NULL)
{
	printf(&quot;Can't write thread in process space\n&quot;);
	return 1;
}

bo=WriteProcessMemory(hProcess, data_pointer,&amp;my_data,sizeof(addr_data),&amp;l);
if(bo==NULL)
{
	printf(&quot;Can't write thread data in process space\n&quot;);
	return 1;
}

hmod=CreateRemoteThread(hProcess, NULL, threadlength, (unsigned long (__stdcall *)(void *))pointer, data_pointer, 0, &amp;l);
l=WaitForSingleObject(hmod,2000);

	  CloseHandle(hmod);
      if(hProcess) CloseHandle(hProcess);

	  return 1;
}
</code></pre>
<p>bekomme leider ein: main.cpp(36) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int<br />
was heisst das?</p>
<p>cu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400323</guid><dc:creator><![CDATA[phandom]]></dc:creator><pubDate>Fri, 09 Nov 2007 13:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiger Code on Fri, 09 Nov 2007 14:32:35 GMT]]></title><description><![CDATA[<p>Ehm das er entweder mit IN oder mit ULONG nicht zurecht kommt. Sollte aber <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400354</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 09 Nov 2007 14:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiger Code on Fri, 09 Nov 2007 14:55:30 GMT]]></title><description><![CDATA[<p>hi,<br />
habs geändert in:</p>
<pre><code class="language-cpp">extern &quot;C&quot;
{
NTSTATUS 
NTAPI 
NtQuerySystemInformation ( IN DWORD i, 
			   OUT PVOID SystemInformation, 
			   IN ULONG SystemInformationLength, 
			   OUT PULONG ReturnLength OPTIONAL );
}
</code></pre>
<p>nun bekomme ich: main.obj : error LNK2019: unresolved external symbol _NtQuerySystemInformation@16 referenced in function &quot;unsigned long __cdecl GetProcessIdByName(char *)&quot; (?GetProcessIdByName@@YAKPAD@Z)</p>
<p>da fehlt wohl ne lib...hm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400369</guid><dc:creator><![CDATA[phandom]]></dc:creator><pubDate>Fri, 09 Nov 2007 14:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiger Code on Fri, 09 Nov 2007 19:59:06 GMT]]></title><description><![CDATA[<p>-.-</p>
<p>die erste Fehlermeldung bedeutete:<br />
Eine Funktion braucht einen Rückgabetyp, und wenn es void ist, hauptsache da ist einer.<br />
Unter C wurde als default int angenommen, was aber mit C++ wieder abgeschafft wurde.</p>
<p>Die 2. Fehlermeldung sagt, dass deine Änderung falsch war xD<br />
Sie sagt nämlich, dass die Funktion, so wie du sie geändert hast nicht gefunden werden kann.</p>
<p>Außerdem wäre die korrekte Deklaration diese (zumindest laut MSDN):</p>
<pre><code class="language-cpp">extern &quot;C&quot; {
NTSTATUS WINAPI NtQuerySystemInformation(
  SYSTEM_INFORMATION_CLASS SystemInformationClass,
  PVOID SystemInformation,
  ULONG SystemInformationLength,
  PULONG ReturnLength
);
}
</code></pre>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400536</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 09 Nov 2007 19:59:06 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiger Code on Sat, 10 Nov 2007 00:38:15 GMT]]></title><description><![CDATA[<p>hab was vergessen:</p>
<pre><code class="language-cpp">#pragma comment (lib, &quot;ntdll.lib&quot;)
</code></pre>
<p>muss ich linken;)</p>
<p>cu</p>
<p>aber nun gibts ein problem bei:</p>
<pre><code class="language-cpp">hmod=CreateRemoteThread(hProcess, NULL, threadlength, (unsigned long (__stdcall *)(void *))pointer, data_pointer, 0, &amp;l);
</code></pre>
<p>die explorer.exe stürzt ab;/</p>
<p>cu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400674</guid><dc:creator><![CDATA[phandom]]></dc:creator><pubDate>Sat, 10 Nov 2007 00:38:15 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiger Code on Sat, 10 Nov 2007 17:59:08 GMT]]></title><description><![CDATA[<p>Eventuell mal prüfen, ob die &quot;function1&quot; aus der &quot;pure_lib.dll&quot; im Prozess &quot;explorer.exe&quot; auch das macht, was sie machen soll. Was soll sie denn machen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401063</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 10 Nov 2007 17:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiger Code on Sun, 11 Nov 2007 08:38:21 GMT]]></title><description><![CDATA[<p>Also ich sehe hier schonmal mehrere Probleme:</p>
<p>* Der Trick mit my_function_end kann, muss aber nicht funktionieren (my_function_end kann irgendwo liegen)<br />
* Keiner garantiert dir dass der Code den der Compiler für my_function generiert &quot;position independent&quot; ist (also keine absoluten Adressen enthält)<br />
* Keiner garantiert dir dass der Code für my_function &quot;am Stück&quot; liegt</p>
<p>Die Lösung ist &quot;my_function&quot; selbst in Assembler zu schreiben, und zwar &quot;position independent&quot; und &quot;am Stück&quot;, und den Assembler Code in ein Byte-Array zu packen. Also so dass das im fertigen Programm dann inetwa so aussieht:</p>
<pre><code class="language-cpp">char const my_function_code[] = { 1, 2, 3, ... };
</code></pre>
<p>Für &quot;1, 2, 3, ...&quot; musst du natürlich den Code der Funktion einsetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401221</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 11 Nov 2007 08:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiger Code on Sun, 11 Nov 2007 09:20:42 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>* Keiner garantiert dir dass der Code den der Compiler für my_function generiert &quot;position independent&quot; ist (also keine absoluten Adressen enthält)</p>
</blockquote>
<p>Das könnte doch nur passieren wenn der Kompiler lt. Einstellungen mehr Code generiert als wie in &quot;my_function&quot; drinsteht (Überlaufprüfungen oder sowas).<br />
So wie &quot;my_function&quot; formuliert ist, hat der Kompiler &quot;keine Veranlassung&quot;, absolute Adressen zu verwenden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401228</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 11 Nov 2007 09:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiger Code on Sun, 11 Nov 2007 16:01:39 GMT]]></title><description><![CDATA[<p>@merker:<br />
Das kommt wohl auf den Compiler drauf an, für welche CPU er Code generieren muss, und überhaupt. Im allgemeinen wirst du wohl Recht haben, kurze Funktionen werden meist nur relative Adressen beinhalten, ausgenommen natürlich Aufrufe von anderen Funktionen (was aber bei Code Injection sowieso &quot;verboten&quot; ist, es sei denn eben über LoadLibrary oder Ähnliches).</p>
<p>Und da du es selbst ansprichst: im Debug-Modus wird zumindest MSVC Code generieren der &quot;versteckt&quot; andere Funktionen aufruft, wie z.B. _RTC_CheckEsp.</p>
<p>----</p>
<p>Worauf ich hinaus wollte: wenn man sicher sein möchte dass alles funktioniert muss man die Funktion in Assembler schreiben und selbst dafür sorgen dass &quot;alles passt&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401435</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 11 Nov 2007 16:01:39 GMT</pubDate></item></channel></rss>