Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Условные переходы в асм-вставках


Страницы:   1 2

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 читал? Как ты сформируешь условный переход, не зная точки перехода?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо