Вторник, 26 Ноября 2024, 03:00

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как сделать .EXE файл (C#) Хелп!!! Люди!!!
DarkSergeyДата: Суббота, 05 Ноября 2011, 21:43 | Сообщение # 1
был не раз
Сейчас нет на сайте
Может знает кто-нибудь. Трабла такая: есть форма с текстбоксом и кнопкой. Вводишь что-нибудь в текстбокс(например Абра-кадабра) и жмешь кнопку, ну и для примера вылазит мессаджбокс, на котором написано("Скомпилировано"). А потом создается .ехе файл, который открывается и в консоли, а в нем написано будет, то, что ввел в текстбоксе..
cry cry cry
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 еще сложней).

Что мешает хранить заготовку в виде файла-шаблона, подгружать ее и допиливать как душе угодно? Байтами здесь не очень пахнет, не в бинарник же по смещениям пишу.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг