Generowanie pliku wykonywalnego

0

Witam mam problem chciałbym napisać coś w stylu takim mam program w którym wpisuje tekst wybieram zaznaczam checkboxy i potem po kliknięciu butona generuje mi się drugi plik wykonywalny po którego odpaleniu wyświetli mi jakie checkboxy były zaznaczone jakie nie i co wpisałem w textboxach ogólnie NIE MA problemu jedyny to to generowanie 2 pliku wykonywalnego jak to zrobić?

1

A nie przesadzasz aby? Nie stworzysz pliku wykonywalnego bez łączenia kodu programu w pamięci i wywoływania zewnętrznego kompilatora. Albo jeszcze lepiej, grzebaniu po tablicy bajtów jakiegoś szablonowego programu w zasobach, co w dodatku u klienta pewnie i tak nie zadziała. Tyle moich pomysłów. Inaczej mówiąc, masakra. I to zupełnie niepotrzebna.

Rozwiązanie dla normalnych psychicznie - stwórz sobie mały plik 'zapisu' który będzie zawierał np. takie dane: (to jest przykład, lepiej byłoby użyć do tego XML-a)

Checkbox1=TAK
Checkbox2=NIE
Checkbox3=NIE
TextBox1=TekstTekstTekst
TextBox2=TekstTekstTekst

i to będzie rozwiązanie lepsze pod każdym względem...

0

W sumie sztuka dla sztuki. Lepiej dokonywać zapisy takich danych do pliku xml, txt, etc.

Jeśli się uprzesz, dasz radę zrobić tak jak chciałeś:

string codeToCompile = tb_assemblyCode.Text; //tutaj musisz przypisać całość kodu, który chcesz skompilować, musisz tam ując wszystkie wartości przez konkatenację i polączyć je z metodami Console.WriteLine(..) aby tworzony plik exe byl w stanie wyświetlić Twój wynik.

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
            var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.dll"});


            string outputFilePath =Path.Combine(fileName); // filename to ścieżka pliku exe, który tworzymy

            parameters.OutputAssembly = filePath;
            parameters.GenerateInMemory = false;
            parameters.GenerateExecutable = true;
           
            CompilerResults results = csc.CompileAssemblyFromSource(parameters, codeToCompile);
            StringBuilder sb = new StringBuilder();
            foreach (var x in results.Errors)
                sb.AppendLine(x.ToString());

            if (!results.Errors.HasErrors) { }// obsługa niepowodzenia w kompilacji 

kod kopiowałem ze swojego projektu, wiec na szybko mogłem coś pominąć.

Przestrzeń nazw to:

using Microsoft.CSharp;
using System.CodeDom.Compiler;

0

Hmm może powiem to tak potrzebuje coś z typu STUB.exe jak mamy np w trojanach tam jest bulider i generuje plik wykonywalny potrzebuje coś w tym stylu

0

Wersja z C# jest dla mięczaków nie znających struktury pliku PE. Prawdziwi mężczyźni generują plik PE od podstaw, nagłówek DOS, PE, kolejne sekcje, w .code gdzie generujesz dynamicznie kod x86 i linkujesz z danymi w .data, wbrew pozorom nie jest to jakieś wybitnie trudne, wystarczy znajomość podstawowych struktur formatu PE i assemblera.

0

Prawdziwi mężczyźni generują plik PE od podstaw
w programowaniu nie operuje się pojęciami „mięczaki” i „prawdziwi mężczyźni”, tylko „to za dużo roboty” i „tak będzie łatwiej”.

1 użytkowników online, w tym zalogowanych: 0, gości: 1