Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
4-1093780326
Endi
2004-08-29 15:52
2004.10.10
Task Scheduler


14-1096009993
Anonimus
2004-09-24 11:13
2004.10.10
подскажите литературу по


14-1094813897
STM
2004-09-10 14:58
2004.10.10
Как написать mailer


14-1095429384
Sekr
2004-09-17 17:56
2004.10.10
Как устанавливать компоненты под Delphi7


1-1095751011
Snip
2004-09-21 11:16
2004.10.10
Опять глупый вопрос по DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский