Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Вниз

Очень интересный вопрос   Найти похожие ветки 

 
ctapik-net   (2002-11-14 20:34) [0]

Можено ли выделив часть памяти и записав в нее исполняемый код запустить на выполнение?


 
AngeL B.   (2002-11-14 21:49) [1]

можно.


 
Ihor Osov'yak   (2002-11-15 01:29) [2]

2 ctapik-net © (14.11.02 20:34)

В Рихтера это подробно описано, на примере создания потока в чужом приложении (естественно, с размещением своего кода в функции потока)


 
Opuhshii   (2002-11-15 07:03) [3]

2ctapik-net © (14.11.02 20:34)

что-то в стиле,...

var
P:Pointer;
...
GetMem(P,SizeOf(MyCodeToExec));
asm
Call P
end;
FreeMem(P);
...



 
ctapik-net   (2002-11-15 07:04) [4]

to All

Буду признателен за линки


 
Yegor Derevenets   (2002-11-15 16:36) [5]

В паскале, помнится, было можно завести массив, указатель на него переделать в указатель на процедуру и вызывать ее по указателю!
К сожалению, не нашел достаточно времени проверить на дельфи, но must work. :-)


 
Моджахед   (2002-11-15 19:20) [6]

Ноу флейм!

Народ, вы понимаете хоть, о чем говорите? Хоть приблизительно -- каким должен быть код, которому передается управление? Хотя-бы как там выполнена адресация.
А то глубокомыслия очень много, а сути нет.


 
Ihor Osov'yak   (2002-11-15 22:08) [7]

Ну понимаю. И то что сам сказал, и то, что другие. А те что, пол-главы перепечатывать с Рихтера?


Зы. Хотя бы удосужился сказать, тебя интересует это для cвоего процесса, или для чужого?


 
Tano   (2002-11-15 22:51) [8]

А всякая лебуда насчет защищенного режима процессора, вроде разделения областей памяти на код/данные/стек не всчет, что ли???
Вообще это попахивает очередным гриппером...


 
ctapik-net   (2002-11-16 06:41) [9]

Нет это нужно для защиты программы


 
Юрий Зотов   (2002-11-16 10:17) [10]

Это сделать можно, но придется немного схитрить. Просто передать управление на данные не получится (регион исполнимого кода должен иметь флажок Executable, а данные его не имеют), но если поместить их в стек - то пройдет. Например, код можно передать, как параметр функции.

Есть, однако, подводный камень - такой код должен перемещаемым (то есть, безразличным к адресу загрузки).

См. статью Криса Касперски в журнале "Программист", №3, 2001.


 
evgeg   (2002-11-16 15:10) [11]

Работающий пример:
http://www.delphikingdom.com/treasury/compile.htm


 
Моджахед   (2002-11-16 20:22) [12]

2 Есть, однако, подводный камень - такой код должен перемещаемым (то есть, безразличным к адресу загрузки).

Собственно, это и есть самый главный подводный камень. И да, действительно, передать управление на "любую" выделенную область памяти (через GetMem) в чистом виде нельзя, поскольку, выделение памяти подразумевается только для данных, а не для кода.
Если впихнуть в стек, то разумеется, пройдет нормально (тут, впрочем, тоже есть камни). А есть еще способ не выделять память специально. Просто можно "перезатирать" память в своей области кода. Например, любую свою "фиктивную" процедуру можно забить чем угодно (лучше DB-шками, чтобы размер легче было вычислить).
Хотя, тут есть над чем подумать. Во всяком случае, этот метод я не использовал.
Впрочем, это все мелочи. Главное, это написать процедуру, так чтобы (см. Top).


 
SV   (2002-11-16 23:31) [13]

Купи RSDN Mag. #1 там как раз по теме.
Пример программы, перехватывающий вызовы апи, подменой точки вызова. Я так с сокетами забовлялся - перхватывал данные.
В MSDN смотри CreateRemoteThread.


Удачи
/SV/


 
ctapik-net   (2002-11-17 09:50) [14]

Спасибо всем ответившим



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.03 c
9-86604
Shadof
2002-07-24 12:51
2003.01.27
Создание интерфейса


1-86896
БурЖуй
2003-01-16 11:21
2003.01.27
POS, Copy, Insert


14-87069
Gunzzz
2003-01-07 21:58
2003.01.27
Nero


1-86954
Mentos
2003-01-13 14:25
2003.01.27
масштабирование


3-86651
Andy Eremin
2003-01-08 08:09
2003.01.27
создание псевдонима





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский