Как сделать .EXE файл (C#) Хелп!!! Люди!!!
| | |
0x90 | Дата: Суббота, 05 Ноября 2011, 22:00 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Создаешь консольную программу, которая выводит некоторую строку, смотрешь нех-редактором по какому смещению находиться твоя строка и запоминаешь. Дальше, в своей программе, открываешь созданный заранее бинарь и установив указатель по нужному смещению записываешь туда содержимое текстбокса.
|
|
| |
Stage | Дата: Суббота, 05 Ноября 2011, 23:19 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| Quote Создаешь консольную программу, которая выводит некоторую строку, смотрешь нех-редактором по какому смещению находиться твоя строка и запоминаешь. Дальше, в своей программе, открываешь созданный заранее бинарь и установив указатель по нужному смещению записываешь туда содержимое текстбокса. Байтомешатели в теме. Это же С# и можно скомпилировать динамически, например вот так.
Сообщение отредактировал Stage - Воскресенье, 06 Ноября 2011, 00:07 |
|
| |
0x90 | Дата: Суббота, 05 Ноября 2011, 23:23 | Сообщение # 4 |
участник
Сейчас нет на сайте
| То есть как это 'скомпилировать динамически'?
|
|
| |
05142 | Дата: Суббота, 05 Ноября 2011, 23:27 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| 0x90, используя .net можно скомпилировать код, это же jit
mecinvader
|
|
| |
0x90 | Дата: Суббота, 05 Ноября 2011, 23:34 | Сообщение # 6 |
участник
Сейчас нет на сайте
| Мда, погуглил и понял о чем речь. Ну такое практически на любом языке можно сделать, но разве вариант предложенный мной во втором посте не проще?
|
|
| |
Stage | Дата: Суббота, 05 Ноября 2011, 23:35 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| Quote Ну такое практически на любом языке можно сделать Нет.
Quote но разве вариант предложенный мной во втором посте не проще? Нет.
|
|
| |
0x90 | Дата: Суббота, 05 Ноября 2011, 23:38 | Сообщение # 8 |
участник
Сейчас нет на сайте
| Насчет первого 'нет'-иногда полезно включать мозги, насчет второго спорить не буду, это субъективное мнение.
|
|
| |
Stage | Дата: Суббота, 05 Ноября 2011, 23:52 | Сообщение # 9 |
постоянный участник
Сейчас нет на сайте
| Quote Насчет первого 'нет'-иногда полезно включать мозги Лол, иди байты помешай. Пример 2х языков, не под jvm и clr, где можно также, или ты очередной диванный теоретик.
Quote насчет второго спорить не буду, это субъективное мнение. 2012 год почти, а таким как вы все БАЙТЫ-ДЕЛЬТАСМЕЩЕНИЯ подавай. Актуальным это было, когда не было других средств, но не сейчас.
|
|
| |
Demeron | Дата: Суббота, 05 Ноября 2011, 23:57 | Сообщение # 10 |
User created in C++
Сейчас нет на сайте
| Quote (Stage) Лол, иди байты помешай. Пример 2х языков, не под jvm и clr, где можно также, или ты очередной диванный теоретик. О Боже!!... Quote (Stage) а таким как вы все БАЙТЫ-ДЕЛЬТАСМЕЩЕНИЯ подавай. Актуальным это было, когда не было других средств, но не сейчас. "средств" - это готовых решений? готовые решения со своими параметрами как минимум не интересно...
Сообщение отредактировал Demeron - Суббота, 05 Ноября 2011, 23:58 |
|
| |
Stage | Дата: Воскресенье, 06 Ноября 2011, 00:02 | Сообщение # 11 |
постоянный участник
Сейчас нет на сайте
| Quote "средств" - это готовых решений? готовые решения со своими параметрами как минимум не интересно... Как минимум воду не лейте. Примеры мне, примеры. Накосячил с ссылкой в своем посте, тащемта товарищ 0х90 скорей всего ничего не понял, поэтому бегом смотреть статью по ссылке.
Сообщение отредактировал Stage - Воскресенье, 06 Ноября 2011, 00:08 |
|
| |
0x90 | Дата: Воскресенье, 06 Ноября 2011, 09:03 | Сообщение # 12 |
участник
Сейчас нет на сайте
| Code using System; using System.CodeDom.Compiler; using System.Collections.Generic; using Microsoft.CSharp; namespace ConsoleCompiler { internal class Program { private static void Main(string[] args) { // Source code для компиляции string source = @" namespace Foo { public class Bar { static void Main(string[] args) { Bar.SayHello(); } public static void SayHello() { System.Console.WriteLine(""Hello World""); } } } "; // Настройки компиляции Dictionary<string, string> providerOptions = new Dictionary<string, string> { {"CompilerVersion", "v3.5"} }; CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions); CompilerParameters compilerParams = new CompilerParameters {OutputAssembly = "D:\\Foo.EXE", GenerateExecutable = true}; // Компиляция CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source); // Выводим информацию об ошибках Console.WriteLine("Number of Errors: {0}", results.Errors.Count); foreach (CompilerError err in results.Errors) { Console.WriteLine("ERROR {0}", err.ErrorText); } } } } Ну скажите мне, что в этом такого? Написать код, задать ключи компиляции и скомпилировать можно практически на любом языке. Вот тоже самое(абсолютно) на С: Code #include <stdio.h> #include <stdlib.h>
int main() { FILE *fp = fopen("test.c","w"); fputs("#include <stdio.h>\n",fp); fputs("int main(){\n",fp); // Можно и на одной строчке конечно, но получится не красиво. fputs("printf(\"Hello world\");\n",fp); fputs("}",fp); fclose(fp); system("gcc test.c -o test.exe -Wl,--subsystem,console"); system("DEL test.c"); system("test.exe"); } Конечно придется таскать с собой зависимости метров на 10-12, но у C# эти возможности тоже не из воздуха появляются, правда? Я это все к тому, что это ни есть какая-то эксклюзивная фишка чтобы орать "это же NET!", "это же JIT" и т.д. К слову этот метод, imho, не подойдет, если нужно скомпилировать что-нибудь крупнее hello world. Придется заниматься байтомешательством(создать с нуля полноценный PE еще сложней). Кажется юзер с ником Vinchenso писал, что многие конструкторы так и поступают.
Сообщение отредактировал 0x90 - Воскресенье, 06 Ноября 2011, 09:03 |
|
| |
Stage | Дата: Воскресенье, 06 Ноября 2011, 15:22 | Сообщение # 13 |
постоянный участник
Сейчас нет на сайте
| Quote что это ни есть какая-то эксклюзивная фишка чтобы орать "это же NET!", "это же JIT" и т.д. Эксклюзивность в том, что это часть платформы, в отличии от твоего примера, где ты через терминал передаешь ключи для компиляции. MS пошли еще дальше, анонсировав проект Roslyn, теперь работа с компиляцией будет такой же частью языка как и ввод-вывод etc.
Quote К слову этот метод, imho, не подойдет, если нужно скомпилировать что-нибудь крупнее hello world. Придется заниматься байтомешательством(создать с нуля полноценный PE еще сложней). Что мешает хранить заготовку в виде файла-шаблона, подгружать ее и допиливать как душе угодно? Байтами здесь не очень пахнет, не в бинарник же по смещениям пишу.
|
|
| |
|