Форум: "Система";
Текущий архив: 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.009 c