Hey!
Das Prinzip nachdem ein Builder arbeitet, hat Gaara ja schon erklärt. Es läuft im Allgemeinen so ab, dass die Stub fertig programmiert wird und so, dass sie die nötigen variablen Informationen aus sich selbst ausließt. Es gibt verschiedene Möglichkeiten diese Informationen in die Stub zu packen. Eine wäre wie Gaara bereits beschrieben hat, sie ans Ende der Stub zu schreiben. Die Methode die ich dir gleich zeigen werde, ist die meiner Meinung nach eleganteste. Ich schreibe die Informationen ganz einfach in die Resourcen der Stub.
Builder :
Code:
struct Parameters
{
char cData[128];
int iData;
}
MyData;
void WriteToFile()
{
CopyFile("SomeDLL.dll", "ExeFile.exe", true);
void* Update = BeginUpdateResourceA("ExeFile.exe", false);
UpdateResourceA(Update, MAKEINTRESOURCEA(0x01000), MAKEINTRESOURCEA(0x011), 0, (void*)&MyData, sizeof(MyData));
EndUpdateResourceA(Update, false);
}
Die struct Parameters enthält die nötigen Informationen, CopyFile kopiert die als DLL getarnte Stub und speichert sie als EXE. Im Folgenden schreibe ich die Informationen mit UpdateResource in die Stub.
Stub :
Code:
struct Parameters
{
char cData[128];
int iData;
};
void UpdateUserdefinedParameteres(Parameters **pParams)
{
HINSTANCE__* Base = GetModuleHandleA(0);
HRSRC__ *ResInfo;
ResInfo = FindResourceA(Base, MAKEINTRESOURCEA(0x011), MAKEINTRESOURCEA(0x01000));
*pParams = (Parameters*)LoadResource(Base, ResInfo);
if((long)*pParams <= 0)
{
MessageBoxA(0,"No Data found","Stub",MB_ICONERROR);
ExitProcess(0);
}
return;
}
Ganz oben im Code findest du die struct Parameters wieder, in diese lade ich mittels LoadResource die Informationen. Jetzt ist die struct mit den Informationen gefüllt, welche nun in der Stub verwendet werden können.
Gruß