![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Условные переходы в асм-вставках
A.L.E.X.A.N.D.E.R © (2007-12-08 16:21:00)Столкнулся со следующей проблемой :
При написании асм-вставки необходимо выполнить условный переход (в моем случае JZ) на адрес , лежащий за пределами моего инжект-кода , т.е. в процессе , в к-й будет производиться ижект .
С JMP'ом всё прекрасно получилось , а с условынми переходами - не знаю как .
Помогите пожалуйста , заранее огромное спасибо )
Rouse_ (2007-12-10 16:46:00) [1]
> Бессодержательные, или заведомо ложные
Если считаешь это таковым - то просто предложы свою версию. Собачиться то зачем друг с другом? Ладно - проехали...
oxffff (2007-12-10 16:44:00) [2]Удалено модератором
Примечание: Оффтоп...
DiamondShark (2007-12-10 16:38:00) [3]
> бо придется резать посты
Правильно.
Бессодержательные, или заведомо ложные, каковым примером является [5], и вообще значительная часть постов Сергей М.
Rouse_ (2007-12-10 16:17:00) [4]DiamondShark, Сергей М. - завязывайте со своими ути-путями, бо придется резать посты. И не забывайте про первый пункт правил.
Сергей М. (2007-12-10 15:55:00) [5]
> oxffff © (10.12.07 15:46) [22]
О т.н. "простоте" я речь и не вел, о ней и у автора речи не идет.
oxffff (2007-12-10 15:46:00) [6]
> Сергей М. © (10.12.07 15:28) [20]
Там действительно проще absolute direct or indirect jump
jmp [ebp-$08] или jmp eax
DiamondShark (2007-12-10 15:38:00) [7]Удалено модератором
Сергей М. (2007-12-10 15:28:00) [8]Удалено модератором
DiamondShark (2007-12-10 15:13:00) [9]
> Сергей М. © (10.12.07 14:42) [12]
Оба-на. Уже появляются какие-то детали про "рассчитать смещение", вместо прежнего бравого "Точно так же, разницы абсолютно никакой".
> Вообще-то КОП у JZ - это $840F.
Ты, видимо, всё-таки заглянул в описание инструкций. Что бы тебе это не сделать до того, как языком чесать?
Не пришлось бы потом юлить и отмазываться.
> oxffff ©
И эта лапша -- вместо пары из джампа и локального условного перехода...
;)
oxffff (2007-12-10 15:03:00) [10]
> Сергей М. © (10.12.07 14:58) [17]
Благодарю за поправку.
Сергей М. (2007-12-10 14:58:00) [11]
> oxffff © (10.12.07 14:50) [14]
Вообще-то КОП у JZ - это $840F.
Ути-пути - не спеши)
А за иллюстрацию, думаю, Автор будет тебе благодарен.
oxffff (2007-12-10 14:57:00) [12]Сократил до
VirtualProtect(@TmainForm.Button4Click,100,PAGE_EXECUTE_READWRITE,a);
FlushInstructionCache(GetCurrentProcess,@TmainForm.Button4Click,100);
asm
mov ecx,offset @ExternalLink;
mov eax,offset @NextInstr;
sub eax,ecx;
mov [offset @PatchHere],eax;
DW $850F;
@PatchHere:DD $00000000;
@NextInstr:
@ExternalLink:
end;
oxffff (2007-12-10 14:51:00) [13]Блин inc не убрал.
> procedure TmainForm.Button4Click(Sender: TObject);
> var a:DWORD;
> begin
> VirtualProtect(@TmainForm.Button4Click,100,PAGE_EXECUTE_READWRITE,
> a);
> FlushInstructionCache(GetCurrentProcess,@TmainForm.Button4Click,
> 100);
> asm
> mov ecx,offset @ExternalLink;
> mov eax,offset @NextInstr;
> sub eax,ecx;
> mov ecx,offset @PatchHere;
> mov [ecx],eax;
> DW $850F;
> @PatchHere:DD $00000000;
> @NextInstr:
> @ExternalLink:
> end;
> end;
oxffff (2007-12-10 14:50:00) [14]УТИ-ПУТИ ПАРНИ.
:)
oxffff (2007-12-10 14:49:00) [15]procedure TmainForm.Button4Click(Sender: TObject);
var a:DWORD;
begin
VirtualProtect(@TmainForm.Button4Click,100,PAGE_EXECUTE_READWRITE,a);
FlushInstructionCache(GetCurrentProcess,@TmainForm.Button4Click,100);
asm
mov ecx,offset @ExternalLink;
mov eax,offset @NextInstr;
sub eax,ecx;
inc eax;
mov ecx,offset @PatchHere;
mov [ecx],eax;
DW $850F;
@PatchHere:DD $00000000;
@NextInstr:
@ExternalLink:
end;
end;
Сергей М. (2007-12-10 14:42:00) [16]
> DiamondShark © (10.12.07 14:24) [11]
> где ты увидел, что адрес нужен Автору?
Он у него ужеесть.
Остается расчитать смещение, если того требует инструкция.
Ничто не мешает это сделать в ран-тайм.
> Он у него, к примеру, в EAX или в глобальной переменной
А по барабану где он у него это самое "к примеру" - хоть в регистре хоть в памяти.
На методику расчета это никак не влияет.
И если расчет невозможно сделать в компайл-тайм, то сделать его в ран-тайм уж точно ничто не мешает.
И про компайл-тайм в вопросе Автора, заметь, ни слова.
Так что ути-пути.
DiamondShark (2007-12-10 14:24:00) [17]
> Сергей М. © (10.12.07 14:15) [9]
Ты точно обкуренный.
> Где ты там увидел, что Автор не знает точки перехода ?
А где ты увидел, что адрес нужен Автору?
> лежащий за пределами моего инжект-кода, т.е. в процессе
> , в к-й будет производиться ижект.
Ну, Автор знает адрес перехода. Он у него, к примеру, в EAX или в глобальной переменной.
И шо? Легче стало?
Ты фигню сказал в [5] :
> Точно так же, разницы абсолютно никакой.
Разница абсолютно принципиальная. JMP допускает кучу режимов адресации. А условные переходы -- только по смещению.
Поэтому для формирования иснттрукции условного перехода компилятор (а не Автор, как тебе с раскумару померещилось) должен знать адрес перехода.
Так что ути-пути.
homm (2007-12-10 14:15:00) [18]> [8] DiamondShark © (10.12.07 14:08)
> Ты Instruction Set Reference читал? Как ты сформируешь условный
> переход, не зная точки перехода?
Укажу по максимуму, 4 байта?
Сергей М. (2007-12-10 14:15:00) [19]
> DiamondShark © (10.12.07 14:08) [8]
> Как ты сформируешь условный переход, не зная точки перехода?
Читай вопрос.
Гдеты там увидел, что Автор не знает точки перехода ?
DiamondShark (2007-12-10 14:08:00) [20]
> Сергей М. © (10.12.07 13:57) [7]
Читай вопрос.
Потом читай Instruction Set Reference.
> Оно нафих не нужно во время компиляции для решения упомянутой
> автором задачи.
Ты Instruction Set Reference читал? Как ты сформируешь условный переход, не зная точки перехода?