Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизЗагрузчик PE из памяти, специально для тех кто не верит Найти похожие ветки
← →
RagE © (2004-09-09 09:57) [0]Вобщем то посвящается тем, кто утверждает что нельзя запустить исполняемый файл из памяти. glgames.h12.ru. Писал на делфи. По умолчанию файл запускает test.exe либо можно передать в параметрах название файла. Перед запуском файл помещается в MemoryStream. в архиве лежат одни из запускаемых программ. Тестировалось на WinXP
← →
Игорь Шевченко © (2004-09-09 10:22) [1]The instructrion at 0xXXXXXXXX referenced memory at 0xXXXXXXXX. The memory could not be "read".
Click on OK to tterminate the program
Click on CANCEL to debug the program.
Глюкодром-с ?
← →
Digitman © (2004-09-09 10:44) [2]еще какой глюкодром !)
каких только отказов нет !
попытка "запустить" тот же notepad.exe приводит к зависанию намертво
но самый главный (и вполне, кстати, объяснимый !) "глюкодром" - отказ в связи с ненахождением ресурсов ... а откуда им взяться, если ресурс считывается из исп.файла, которого нет ? точнее, тек.исполняемый файл - вовсе не тот, в котором подразумевается наличие ресурса ?
> RagE
мозги нам тут не парь - то что ты "стартуешь" (пусть даже и успешно в частном случае), вовсе не является автономным процессом
← →
RagE © (2004-09-09 11:06) [3]Я не говорил что работает со всеми файлами, работа над проектом еще ведется.
Насчет ресурсов. Посмотрите test.exe. по вашему иконка где находится? именно в ресурсах.
по поводу notepad calc и прочих виндовых штук
у них ImageBase 10000000 а не 400000 как у многих других
еще не разобрался почему туда просто не прыгает. Я всего лишь показал что все возможно. и пусть пока не со всеми прогами но работает. Запуск Quake 2, Quake 3, Starcraft, Warcraft 3 я считаю это уже что то. Могу вам сказать какие именно проги щас не запускаются. Те которые тестят саии себя на контрольные суммы и вирусы, виндовые служебные, а также те у которых есть TLS.
← →
Digitman © (2004-09-09 11:13) [4]
> по поводу notepad calc и прочих виндовых штук
> у них ImageBase 10000000 а не 400000 как у многих других
тогда как ты объяснишь факт, что при "старте" простейшего дельфийского приложения с одной-единственной "пустой" формой vclxx.bpl дает отлуп с диагностикой EResNotFound ?
← →
Плохиш © (2004-09-09 11:18) [5]
> RagE © (09.09.04 11:06) [3]
Попробовал запустить свою програмку, что-то там делал несколько секунд и закрылся ничего не сказав.
Лажа.
← →
RagE © (2004-09-09 12:25) [6]Digitman © (09.09.04 11:13) [4]
Плохиш © (09.09.04 11:18) [5]
приведенные игры тоже сделаны на делфи, но они работают. Все что использует vcl пока не работает ввиду того что такие файлы исползуют TLS, поддержки которой пока нет.
Если закрылся ничего не сказав, то не был произведен запуск приложения. Такое бывает также с calc.exe например.
Версия этой проги даже не альфа. Так что если вы не запустили какое то приложение то это еще не значит что прога абсолютно не работает. Сам факт возможен, я считаю это я доказал.
← →
Игорь Шевченко © (2004-09-09 12:25) [7]RagE © (09.09.04 11:06) [3]
Я запускал свою программу (написанную на Delphi), Imagebase у нее $400000, но кроме огромного количества Access Violations ничего не получил.
Ты бы сслыку на исходники дал, глядишь, ошибку бы тебе объяснили... А за авторское право на идею можешь не волноваться - текст РАБОТАЮЩИХ загрузчиков есть и в wine и в ReactOS
← →
Игорь Шевченко © (2004-09-09 12:29) [8]Еще пример:
Вот текст программы:
program WinApi;
uses
Windows, Messages, SysUtils;
{$R *.RES}
function MyCoolWndProc (Window: HWND; Message, WParam: Cardinal;
LParam: Cardinal): Longint; stdcall;
var
ps : PAINTSTRUCT;
DC : HDC;
r : TRect;
begin
case Message of
WM_DESTROY:
begin
PostQuitMessage (0);
Result := 0;
Exit;
end;
WM_PAINT:
begin
dc := BeginPaint (Window, ps);
try
TextOut(DC, 0, 0, "Hello, Windows!", 15);
SetRect (R, 100, 100, 100, 100);
DrawText (DC, "Hello, world!", Length("Hello, world!"), R, DT_CALCRECT);
SetBkColor (DC, GetSysColor(COLOR_BTNFACE));
DrawText (DC, "Hello, world!", Length("Hello, world!"), R,
DT_LEFT OR DT_NOPREFIX);
OffsetRect (R, -1, -1);
Inc( R.Right, 3);
Inc( R.Bottom, 2);
DrawEdge (DC, R, EDGE_ETCHED, BF_RECT);
finally
EndPaint (Window, ps);
end;
end;
end;
Result := DefWindowProc (Window, Message, WParam, LParam);
end;
var WClass : WNDCLASS;
MyHWND : HWND;
MyMsg : MSG;
begin
WClass.hInstance := HInstance;
WClass.hIcon := 0;
WClass.hCursor := LoadCursor (0, IDC_ARROW);
WClass.hbrBackground := HBRUSH(GetStockObject(WHITE_BRUSH));
WClass.lpfnWndProc := @MyCoolWndProc;
WClass.lpszClassName := "MyCoolClass";
if RegisterClass (WClass) = 0 then begin
RaiseLastWin32Error;
Exit;
end;
MyHWND := CreateWindowEx (0, "MyCoolClass", "MyCoolWindow",
WS_OVERLAPPEDWINDOW,
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
0, 0, HInstance, nil);
if MyHWND = 0 then begin
RaiseLastWin32Error;
Exit;
end;
ShowWindow (MyHWND, SW_SHOWNORMAL);
while GetMessage(MyMsg, 0, 0, 0) do begin
TranslateMessage (MyMsg);
DispatchMessage(MyMsg);
end;
end.
Программа не использует VCL, как видно из ее текста. Однако, при попытке ее запуска, запуска не происходит. То есть, вообще ничего не происходит - окно не появляется. При запуске из командной строки программа запускается, твоим загрузчиком - нет.
← →
Digitman © (2004-09-09 12:40) [9]
> RagE © (09.09.04 12:25) [6]
> Все что использует vcl
а что ты подразумеваешь под vcl ? ран-тайм пакеты ? так ведь Делфи-приложение м.б. собрано без оных, но при этом точно так же использовать vcl
ну ты, кстати, так и не дал свои комментарии к [4] ...
← →
Digitman © (2004-09-09 13:02) [10]
> Все что использует vcl пока не работает ввиду того что такие
> файлы исползуют TLS
ерунду городишь
Любое Делфи-приложение, использует оно vcl или не использует, в ходе инициализации безусловно создает как минимум одну TLS-структуру, которая используется осн.трэдом процесса приложения
← →
RagE © (2004-09-09 14:33) [11]Digitman © (09.09.04 12:40) [9]
Как обьяснить [4] я не знаю сам. Вообще я много времени бился над тем чтобы хотя бы хоть это получить. Естественно все это будет дорабатываться. Мне информации не хватает.
Большая просьба если у кого есть инфа о том как грузится процесс в виндовс буду благодарен.
--------------------------------------------------------------------------------
Игорь Шевченко © (09.09.04 12:25) [7]
Текст wine я смотрел. Пришел к тому что весь запуск выполняет wineserver. Только как оно это делает все равно не нашел.
Исходник я пока не хочу выкладывать, ввиду того что этот проект делается на заказ. На самом деле там ничего секретного нет. Все эти куски подобные можно опять же в wine найти. Просто я прибегнул к некоторым хитростям в настройках проекта и многие проблемы исчезли, например со стеком и загрузкой приложения по ImageBase. Не хватает какой то детали, какой пока не знаю.
Кстати только что пробовал на 98 винде, ничего не работает, пока только под ХП выходит.
← →
Digitman © (2004-09-09 15:15) [12]
> RagE © (09.09.04 14:33) [11]
но с ресурсами все равно ты поимеешь геморрой
тебе придется перехватывать все обращения к АПИ-ф-циям, работающим с ресурсами
← →
-SeM- (2004-09-09 15:51) [13]2RagE ©
Попробуй найди DllMemoryLoader.zip или как минимум DLLUnit.pas из него (DLL Loader by Aphex). Там запуск с ресурса, но легко переделать как ты хочешь. И не смотри что Dll... - оно спокойно работает и с твоими прогами, и с написанными на KOL.
← →
Игорь Шевченко © (2004-09-09 15:51) [14]
> Большая просьба если у кого есть инфа о том как грузится
> процесс в виндовс буду благодарен.
У Руссиновича с Соломоном есть. В ReactOS есть - там wineserver"а нету.
← →
BiN © (2004-09-09 16:40) [15]>> RagE © (09.09.04 14:33) [11]
....Мне информации не хватает.
http://rsdn.ru/article/baseserv/peloader.xml
← →
RagE © (2004-09-09 17:28) [16]BiN © (09.09.04 16:40) [15]
это слегка не то
SeM- (09.09.04 15:51) [13]
дык с длл другое дело совсем, боюсь что это не подойдет
← →
-SeM- (2004-09-09 18:02) [17]RagE © (09.09.04 17:28) [16]
В том то и дело, что твой game.exe (Zeqfreed) из ресурса спокойно запускается, то же и с прогами на KOL. Если бы не проверил, не говорил бы.
А если бы test.EXE не сжал AsPack"ом, то и он запустился бы.
А ссылочку [15] тебе как раз ту дали, зря отказываешся. Но как говорится хозяин барин - тебе виднее.
← →
Digitman © (2004-09-10 08:07) [18]
> дык с длл другое дело совсем
а какая разница ? тот же PE-формат, те же действия нужно выполнить .. только точка входа иная ..
вопрос-то в том, что все это - суррогат ... отдельный процесс все равно не удастся стартовать таким макаром
← →
RagE © (2004-09-10 12:35) [19]-SeM- (09.09.04 18:02) [17]
дело в том что я ту ссылочку уже не раз читал.
Разница то есть все равно между длл и exe, вот ее и надо учесть.
Новый процесс естественно запустить проблемно, у меня текущий заменяется запускаемым, вобщем то полностью новый и не требуется
← →
RagE © (2004-09-10 12:44) [20]-SeM- (09.09.04 18:02) [17]
вобщем ты знаешь, потестировал я щас эту прогу, так разницы никакой, моя даже больше запускает чем эта.
← →
Digitman © (2004-09-10 12:47) [21]
> Новый процесс естественно запустить проблемно
не то что "проблемно" - нет иных документированных способов, нежели CreateProcess() и иже с ними !
← →
-SeM- (2004-09-10 13:21) [22]RagE © (10.09.04 12:44) [19]
> Разница то есть все равно между длл и exe, вот ее и надо учесть.
А в чем разница?
RagE © (10.09.04 12:44) [20]
Ну не знаю что у тебя запускается, а по всей ветке твой лоадер дает AV.
И у меня тоже.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.068 c