forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Visual Basic (http://forum.boolean.name/forumdisplay.php?f=62)
-   -   Казнить Exe (http://forum.boolean.name/showthread.php?t=2100)

c0mrad 12.12.2006 21:58

Казнить Exe
 
Как запустить любой экзешник програмно ?

alcoSHoLiK 12.12.2006 23:55

Re: Казнить Exe
 
Эмулировать работу ОСовского загрузчика)

Diplomat 13.12.2006 00:12

Re: Казнить Exe
 
Сори за дезу насчет ЕкзекФайл. Перепутал разделы. :-)

Насколько помню, в Варсике 4 и 5 ЕХЕ-шники запускаются с помощью команды Shell

Что однако не отменяет необходимость самостоятельного ознакомления с прилагающимися материалами.

jimon 13.12.2006 01:17

Re: Казнить Exe
 
запустить еще один поток и
перейти на Entry point PE файла

:)

Maxus 13.12.2006 01:57

Re: Казнить Exe
 
Да но для начала нужно секции все правильно разместить, иначе КРАШ.

jimon 13.12.2006 08:41

Re: Казнить Exe
 
с етим возится прийдется :(

SubZer0 14.12.2006 03:56

Re: Казнить Exe
 
в Shell32.dll есть функция ShellExecute()

принимает всего пять параметров... все null кроме третьего который является адресом на строку в которой путь к приложению (строка заканчивается нулем)... это из асма... а из васика хз... надо в МСДН смотреть... 100% должна быть такая функция...

:)

Maxus 14.12.2006 10:23

Re: Казнить Exe
 
Значит так если запустить ЕХЕ с жеского диска: Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long.


Если пускать из памяти: Нужно создать пустой приостановленный процесс, разместить все секции согласно их адресов в памяти, сменить Точку входа, и после продолжить процесс.

jimon 14.12.2006 16:44

Re: Казнить Exe
 
есть некий набор exe + dll
нужно зделать дамп памяти после загрузки exe и dllок в оперативку
и потом востановить етот дамп уже из другого exe не имея первоначальной программы

ето возможно ? :)

Maxus 14.12.2006 16:48

Re: Казнить Exe
 
Неа.
Сам подумай, прога уже работать будет.

pax 14.12.2006 23:50

Re: Казнить Exe
 
Цитата:

Сообщение от Diplomat
Насколько помню, в Варсике 4 и 5 ЕХЕ-шники запускаются с помощью команды Shell

Вот я посмотрел как использовать эту комманду в MSDN в коде VBNET:
Цитата:

Функция Shell
Запускает исполняемую программу и возвращает целочисленное значение, содержащее идентификатор процесса программы, если она все еще выполняется.

[highlight=VBNET]Public Function Shell( _
ByVal Pathname As String, _
Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus, _
Optional ByVal Wait As Boolean = False, _
Optional ByVal Timeout As Integer = -1 _
) As Integer[/highlight]


Параметры
Pathname
Обязательный. String. Имя исполняемого файла со всеми необходимыми аргументами. Pathname может также содержать имя диска и путь.
Style
Необязательный. AppWinStyle. Значение, выбираемое из перечисления AppWinStyle, соответствующее стилю окна, в котором запускается программа. Если параметр Style опущен, Shell использует значение AppWinStyle.MinimizedFocus, запускающее программу в свернутом окне с фокусом.
Аргумент Style может принимать одно из следующих значений:

Цитата:

Сообщение от Значение перечисления
AppWinStyle.Hide - Окно скрыто, и фокус передан скрытому окну.
AppWinStyle.NormalFocus - Окно получает фокус и отображается в своих предыдущих размере и позиции.
AppWinStyle.MinimizedFocus - Окно отображается как значок и имеет фокус.
AppWinStyle.MaximizedFocus - Окно получает фокус и развернуто во весь экран.
AppWinStyle.NormalNoFocus - Окно восстанавливает свои последние размер и позицию. Активное в данный момент окно остается активным.
AppWinStyle.MinimizedNoFocus - Окно отображается в виде значка в панели задач. Активное в данный момент окно остается активным.

Wait
Необязательный. Boolean. Значение, определяющее, должна ли функция Shell ожидать завершения выполнения программы. Если параметр Wait опущен, Shell использует False.
Timeout
Необязательный. Integer. Длительность в миллисекундах интервала, в течение которого ожидается завершение выполнения программы, если Wait равно True. Если параметр Timeout опущен, Shell использует-1, то есть таймаут не используется и Shell ожидает завершения выполнения программы. Таким образом, если вы опустите Timeout или установите его в -1, существует возможность, что Shell никогда не передаст управления вашей программе.


Примечания
Значение, возвращаемое Shell, зависит от того, находится ли программа, указанная в Pathname, до сих пор в процессе выполнения (на момент возврата Shell). Если вы установите Wait в True и программа завершится до окончания таймаута, Shell возвращает ноль. Если таймаут истекает или вы опускаете Wait или установили его в значение в False, Shell возвращает идентификатор процесса программы. Идентификатором процесса называется уникальный номер, определяющий запущенную программу.

Если функция Shell не может запустить указанную программу, возникает ошибка System.IO.FileNotFoundException. Это может произойти, например, когда вы пытаетесь запустить 16-разрядную программу, такую как command.com, из приложения, использующего System.Windows.Forms. Для обработки подобной ситуации можно запустить 32-разрядную программу, которая запустит требуемую 16-разрядную. В случае с command.com можно в качестве альтернативы запустить cmd.exe.

По умолчанию функция Shell выполняет программу асинхронно. Это означает, что программа, запущенная функцией Shell может не прекратить выполнения до того, как операторы, следующие за Shell, будет выполнены. Если вы желаете дождаться окончания выполнения программы, установите Wait в True.

Следует всегда заключать полный путь и имя файла в кавычки, согласно следующему примеру:

ID = Shell("""C:\Program Files\MyFile.exe"" -a -q", , True, 100000)
Каждая пара прилежащих двойных кавычек ("") в строковом литерале интерпретируется, как кавычка внутри строки. Таким образом, в предыдущем примере функции Shell передается следующая строка:

"C:\Program Files\MyFile.exe" -a -q
Если путь не заключен в кавычки, Windows будет искать файл Program.exe в каталоге C:\, вместо MyFile.exe в C:\Program Files.


Пример:

Данный пример использует функцию Shell для выполнения приложения, указанного пользователем. Задание AppWinStyle.NormalFocus в качестве второго аргумента раскрывает окно нормального размера и передает ему фокус.

[highlight=VBNET]Dim ProcID As Integer
' Run Calculator.
ProcID = Shell("C:\Windows\system32\calc.exe", AppWinStyle.NormalFocus)
' The preceding path is for Windows XP;
' The Windows 2000 path is C:\WINNT\system32\calc.exe.[/highlight]
;)


Часовой пояс GMT +4, время: 21:13.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot