Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 09:57   #1
fireballpro100
Новичок
Джуниор
 
Регистрация: 15.02.2012
Сообщений: 1
По умолчанию exe для запуска exe

Говорю сразу: я ничего не смыслю в програмировании; зачем подался на такой форум? Надеюсь получить ответ на свой вопрос,упавая на то, что его реализация не такая сложная.

У меня возникла потребность, создать exe файл, который запускает другую программу. То есть: просто тупо играет роль посредника. Другими словами: что-то наподобие ярлыка, только exe , а не lnk.

Существует ли решение подобному? Прошу не ругаться, что пытаюсь добиться "готовенького".
fireballpro100 вне форума Ответить с цитированием
Старый 15.02.2012, 10:27   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ОМГ!!

а ассемблер вам при этом зачем???!

Возьмите любой язык высокого уровня (да хоть тот же Delphi/FreePascal) - и напишите на нём.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.02.2012, 11:18   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

fireballpro100
такие вещи реализуются на основе функции WinExec, ShellExecute, CreateProcess и т.п. Вот описание WinExec.
Код:
UINT WinExec(  
	LPCSTR lpCmdLine,	// строка с именем программы
	UINT uCmdShow	// вид вывода на экран в смысле
			//скрытая или нормальная и так далее
);
А вот код на С/С++ примером, который запускает обычный калькулятор:

Код:
// ExecTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

void main()
{
	cout << WinExec("c:\\windows\\calc.exe",SW_SHOW) << endl;
}
то же самое на ассемблере
Код:
.data
string db 'c:\windows\calc.exe',0
.code
start: push SW_SHOW
        push offset string
        call _imp__WinExecA@8
можно попробовать запустить приложение вот так
Код:
ShellExecute(NULL, L"open", L"C:\\windows\\system32\\calc.exe", NULL, NULL, SW_SHOWNORMAL);
а можно и вот так
Код:
TStartupInfo si;
TProcessInformation pi;
ZeroMemory(&si,sizeof (si)); si.cb = sizeof(si);
CreateProcess( NULL, // No module name (use command line).
L"C:\\windows\\system32\\calc.exe", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
false, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si,  // Pointer to STARTUPINFO structure.
&pi  ) // Pointer to PROCESS_INFORMATION structure.
Mikl___ вне форума Ответить с цитированием
Старый 15.02.2012, 13:10   #4
Noor
Участник клуба
 
Аватар для Noor
 
Регистрация: 01.11.2006
Сообщений: 1,051
По умолчанию

Ну, а для особо извращенных можно интегрировать exe в exe (не в виде ресурсов, а в виде массива) и потом при необходимости извлекать и запускать
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var //тут описание переменных
Form1: TForm1;
Exe: TFileStream; //Файловый поток

const
data: array [0..486419 - 1] of byte = ($6E, $3B, $B8, $31, $2B, $E9, $BA, $9A, $7B, $83, $63, $9A, $03, $64, $1B, $53, 
	$28, $66, $27, $BF, $B1, $55, $ED, $20, $33, $E5, $82, $A5, $7F, $B9, $93, $2F .....................$41, $30, $36
); //Массив байтов нашего exe (тут приведен не польностью)

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 begin
   Exe:=TFileStream.create('bot.exe',fmcreate); //Инициализация Файлового потока для 
   exe.Write(data,486419);//Запись в поток массива байтов
   exe.Free; //освобождаем поток
 end;
end.
Запускать извлеченный файл можно через WinExec или ShellExecute
Вложения
Тип файла: zip Exe2Exe.zip (2.42 Мб, 10 просмотров)

Последний раз редактировалось Noor; 15.02.2012 в 13:26.
Noor вне форума Ответить с цитированием
Старый 15.02.2012, 13:10   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

И, что показательно, даже VBA поддерживает подобное:

Код:
Shell "C:\WINDOWS\notepad.EXE", vbMinimizedFocus
выполнив данный код макросом вы откроете Блокнот в активном свёрнутом окне)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 15.02.2012, 19:49   #6
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Программка bat to exe это все что вам нужно.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 16.04.2012, 19:19   #7
programmisto1
Пользователь
 
Регистрация: 16.04.2012
Сообщений: 11
По умолчанию

Ну кто хочет на чистом ассемблере прочитай файл и сохрани его в конце себя, а затем прыгай в эти сохраненные данные. Только и всего!
programmisto1 вне форума Ответить с цитированием
Старый 16.04.2012, 21:07   #8
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

programmisto1, расскажите же поподробнее, что то малопонятно что имелось ввиду.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как скомпилить exe для запуска без прописи alias mrrcat Помощь студентам 3 28.06.2010 05:25
Как 'засунуть' звуковой файл в EXE-шник.чтоб моя прога состояла всего из одного exe betirsolt Общие вопросы Delphi 11 18.04.2010 21:58
Из программы 1.exe создаем пустой файл 2.exe. Как из программы 1 внести API функции в программу 2? X-LEV-X Общие вопросы Delphi 7 09.03.2010 08:33
Передача строки exe (с формой (API)) ↔ exe (форма скрыта) Alex Cones Общие вопросы Delphi 16 04.10.2009 15:26
чтение из одного exe файла, и запись в другой exe inndim Общие вопросы Delphi 2 04.02.2009 15:23