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

Вниз

EIP   Найти похожие ветки 

 
Selesty   (2003-01-20 11:04) [0]

Такой вопрос:
допустим у меня есть строка
ExeCode:string="x90xebx03x5dxebx05xe8xf8xffxffxffx83xc5x15x90x90"
@ExeCode - даст адрес этой строчки?
а как теперь засунуть этот адрес в eip чтобы код содержащийся в по этому адресу начал выполняться
И ещё в каком виде нужно загонять машинный код в строку, чтобы он выполнялся:
1 - в таком: a="\x90\xeb\x03\x5d\xeb\x05\xe8\xf8\xff\xff\xff\x83\xc5\x15\x90\x90"
2 - в таком:
a="x90xebx03x5dxebx05xe8xf8xffxffxffx83xc5x15x90x90"
3 - в таком:
a="90eb035deb05e8f8ffffff83c5159090"
Положит ли интерпритатор строку в стек, если я обозначу переменную содержащую маш коды как ExeCode:string="..." в Var функции (в модуле (unit))
как строка обозначенная как string будет расположена в 32 битном стеке, если строка будет представлять некий машинный код - выполнится ли он, если на него будет указывать eip?
Думаю вопрос понятен?!
Только не спрашивайте зачем мне это.... Просто Нуно очень
Ответ
2. Строку надо в виде:
SomeString: string=#$b0#$bf....;
3. вместо @SomeString используй procedure(PChar(SomeString))... так оно правильно адрес возьмет

procedure(PChar(SomeString)) - не совсем понятно, так как в регистр eip засунуть адрес строки, чтобы далее программа начала выполнять инструкции заданные машинными кодами в строке, допустим есть функция
function exe_code(var VerOS:byte); //VerOS - версия Оси (смотря какая)
var
SomeString:string="#$90#$eb#$03#$5d#$eb#$05#$e8#$f8#$ff#$ff#$ff#$83";
{Куда поместится эта строка?В стек или в data? - Важно - так как код самомодифицирующийся}
regi:registers;
P:Pchar;
begin
P:=@SomeString;
regi.ip:=p; //помещаем указатель на строку в eip - прокатит так?-начнёт ли код из //которого состоит SomeString выполняться?

end;
//Или как ещё можно заменить eip на нужный мне, в течение выполнения программы?


 
Digitman   (2003-01-20 11:31) [1]


> допустим у меня есть строка
> ExeCode:string="x90xebx03x5dxebx05xe8xf8xffxffxffx83xc5x15x90x90"
> @ExeCode - даст адрес этой строчки?


Нет, не даст. Это - адрес управляющей структуры AnsiString во внутр.представлении ObjectPascal, а не самих строковых данных, уонтролируемых этой структурой.


> в каком виде нужно загонять машинный код в строку,
> чтобы он выполнялся:
> 1 - в таком: a="\x90\xeb\x03\x5d\xeb\x05\xe8\xf8\xff\xff\xff\x83\xc5\x15\x90\x90"
> 2 - в таком:
> a="x90xebx03x5dxebx05xe8xf8xffxffxffx83xc5x15x90x90"
> 3 - в таком:
> a="90eb035deb05e8f8ffffff83c5159090"


Ни в одном из перечисленных.


> Положит ли интерпритатор строку в стек, если я обозначу
> переменную содержащую маш коды как ExeCode:string="..."
> в Var функции (в модуле (unit))


ObjectPascal в составе Delphi - это не интерпретатор, а компилятор.
Да, положит. Но в рез-те в стек будет положен адрес упр.структуры строковой переменной типа AnsiString, объявленной в процедуре локально.


> строка будет представлять некий машинный код - выполнится
> ли он, если на него будет указывать eip?


Строковые данные не могут содержать маш.код.
Да, выполнится. Но результат будет непредсказуем.


> как ещё можно заменить eip на нужный мне, в течение выполнения
> программы?


Явно записать в eip нужное значение нельзя.
eip получает новое значение:
- jmp, j[condition]
- call/ret[n]
- intXX, iret[f]


 
Игорь Шевченко   (2003-01-20 13:01) [2]

Digitman © (20.01.03 11:31)

В дополнение:

push needed_address
ret

С уважением,


 
Digitman   (2003-01-20 13:06) [3]


> Игорь Шевченко


Дык иыть - хоть push хоть не push - все равно ret[n] :))))


 
Игорь Шевченко   (2003-01-20 13:14) [4]


> Digitman ©

:-))
Маленькая разница все-таки есть :-)))


 
Danlicha   (2003-01-22 00:39) [5]

Так тоже можно:

mov eax, needed_address
jmp eax




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

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

Наверх




Память: 0.46 MB
Время: 0.008 c
7-54353
Krot
2003-01-18 05:57
2003.03.17
Работа с портом USB


14-54261
BALU2222
2003-02-28 15:13
2003.03.17
Чистота процессора.


1-53998
Vital28
2003-03-06 15:53
2003.03.17
Как программно кликнуть по кнопке или пунуту меню в своей проге ?


14-54190
SergeN
2003-03-03 07:53
2003.03.17
30 декабря 1899


14-54279
Hint
2003-02-20 17:46
2003.03.17
А что нам надо?





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