Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.24;
Скачать: CL | DM;

Вниз

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

 
A.L.E.X.A.N.D.E.R ©   (2007-12-08 16:21) [0]

Столкнулся со следующей проблемой :
При написании асм-вставки необходимо выполнить условный переход (в моем случае JZ) на адрес , лежащий за пределами моего инжект-кода , т.е. в процессе , в к-й будет производиться ижект .
С JMP"ом всё прекрасно получилось , а с условынми переходами - не знаю как .
Помогите пожалуйста , заранее огромное спасибо )


 
Юрий Зотов ©   (2007-12-08 16:31) [1]

То есть как - джамп за пределы текущей процедуры/метода? А кто же стек восстанавливать будет?


 
Dib@zol ©   (2007-12-08 16:34) [2]

Юзай CALL. Или проставляй как JMP, а при ветвлении, если условие не выполнено, перепрыгивай етот JMP.


 
A.L.E.X.A.N.D.E.R ©   (2007-12-08 16:43) [3]


> То есть как - джамп за пределы текущей процедуры/метода?
>  А кто же стек восстанавливать будет?

текущая `процедура` используется только , как место в котором хранится код , на неё саму идет JMP )


 
Юрий Зотов ©   (2007-12-08 18:01) [4]

> A.L.E.X.A.N.D.E.R ©   (08.12.07 16:43) [3]

Не, в такой консерватории что-то неладно. В смысле - структуризация кода какая-то очень подозрительная. В чем исходная задача-то?


 
Сергей М. ©   (2007-12-10 08:18) [5]


> JMP"ом всё прекрасно получилось , а с условынми переходами
> - не знаю как


Точно так же, разницы абсолютно никакой.


 
DiamondShark ©   (2007-12-10 13:40) [6]


> В чем исходная задача-то?

Чего-нибудь крякнуть, вестимо.


> Сергей М. ©   (10.12.07 08:18) [5]
> Точно так же, разницы абсолютно никакой.

Ути-пути.


> A.L.E.X.A.N.D.E.R ©   (08.12.07 16:21)  


> При написании асм-вставки необходимо выполнить условный
> переход (в моем случае JZ) на адрес , лежащий за пределами
> моего инжект-кода , т.е. в процессе , в к-й будет производиться
> ижект .
> С JMP"ом всё прекрасно получилось , а с условынми переходами
> - не знаю как .

Никак. Условные переходы только относительные по 8-, 16- или 32-битному смещению.
А так как на момент компиляции положение точки перехода неизвестно, то и вычислить смещение не представляется возможным.

Используй JMP, а условные переходы для обхода JMP.


 
Сергей М. ©   (2007-12-10 13:57) [7]


> DiamondShark ©   (10.12.07 13:40) [6]


Ты, видимо, опять пьян.


> на момент компиляции положение точки перехода неизвестно


Оно нафих не нужно во время компиляции для решения упомянутой автором задачи.

Ути-пути.


 
DiamondShark ©   (2007-12-10 14:08) [8]


> Сергей М. ©   (10.12.07 13:57) [7]

Читай вопрос.
Потом читай Instruction Set Reference.


> Оно нафих не нужно во время компиляции для решения упомянутой
> автором задачи.

Ты Instruction Set Reference читал? Как ты сформируешь условный переход, не зная точки перехода?


 
Сергей М. ©   (2007-12-10 14:15) [9]


> DiamondShark ©   (10.12.07 14:08) [8]


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


Читай вопрос.
Где ты там увидел, что Автор не знает точки перехода ?


 
homm ©   (2007-12-10 14:15) [10]

> [8] DiamondShark ©   (10.12.07 14:08)
> Ты Instruction Set Reference читал? Как ты сформируешь условный
> переход, не зная точки перехода?

Укажу по максимуму, 4 байта?


 
DiamondShark ©   (2007-12-10 14:24) [11]


> Сергей М. ©   (10.12.07 14:15) [9]

Ты точно обкуренный.


> Где ты там увидел, что Автор не знает точки перехода ?

А где ты увидел, что адрес нужен Автору?


> лежащий за пределами моего инжект-кода , т.е. в процессе
> , в к-й будет производиться ижект .

Ну, Автор знает адрес перехода. Он у него, к примеру, в EAX или в глобальной переменной.
И шо? Легче стало?

Ты фигню сказал в  [5] :

> Точно так же, разницы абсолютно никакой.


Разница абсолютно принципиальная. JMP допускает кучу режимов адресации. А условные переходы -- только по смещению.
Поэтому для формирования иснттрукции условного перехода компилятор (а не Автор, как тебе с раскумару померещилось) должен знать адрес перехода.

Так что ути-пути.


 
Сергей М. ©   (2007-12-10 14:42) [12]


> DiamondShark ©   (10.12.07 14:24) [11]


> где ты увидел, что адрес нужен Автору?


Он у него уже есть.
Остается расчитать смещение, если того требует инструкция.
Ничто не мешает это сделать в ран-тайм.


> Он у него, к примеру, в EAX или в глобальной переменной


А по барабану где он у него  это самое "к примеру" - хоть в регистре хоть в памяти.
На методику расчета это никак не влияет.
И если расчет невозможно сделать в компайл-тайм, то сделать его в ран-тайм уж точно ничто не мешает.

И про компайл-тайм в вопросе Автора, заметь, ни слова.

Так что ути-пути.


 
oxffff ©   (2007-12-10 14:49) [13]

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;


 
oxffff ©   (2007-12-10 14:50) [14]

УТИ-ПУТИ ПАРНИ.
:)


 
oxffff ©   (2007-12-10 14:51) [15]

Блин 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:57) [16]

Сократил до
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;


 
Сергей М. ©   (2007-12-10 14:58) [17]


> oxffff ©   (10.12.07 14:50) [14]


Вообще-то КОП у JZ - это $840F.

Ути-пути - не спеши)

А за иллюстрацию, думаю, Автор будет тебе благодарен.


 
oxffff ©   (2007-12-10 15:03) [18]


> Сергей М. ©   (10.12.07 14:58) [17]


Благодарю за поправку.


 
DiamondShark ©   (2007-12-10 15:13) [19]


> Сергей М. ©   (10.12.07 14:42) [12]


Оба-на. Уже появляются какие-то детали про "рассчитать смещение", вместо прежнего бравого "Точно так же, разницы абсолютно никакой".


> Вообще-то КОП у JZ - это $840F.


Ты, видимо, всё-таки заглянул в описание инструкций. Что бы тебе это не сделать до того, как языком чесать?
Не пришлось бы потом юлить и отмазываться.


> oxffff ©

И эта лапша -- вместо пары из джампа и локального условного перехода...

;)


 
Сергей М. ©   (2007-12-10 15:28) [20]

Удалено модератором


 
DiamondShark ©   (2007-12-10 15:38) [21]

Удалено модератором


 
oxffff ©   (2007-12-10 15:46) [22]


> Сергей М. ©   (10.12.07 15:28) [20]


Там действительно проще absolute direct or indirect jump

jmp [ebp-$08] или jmp eax


 
Сергей М. ©   (2007-12-10 15:55) [23]


> oxffff ©   (10.12.07 15:46) [22]


О т.н. "простоте" я речь и не вел, о ней и у автора речи не идет.


 
Rouse_ ©   (2007-12-10 16:17) [24]

DiamondShark, Сергей М. - завязывайте со своими ути-путями, бо придется резать посты. И не забывайте про первый пункт правил.


 
DiamondShark ©   (2007-12-10 16:38) [25]


> бо придется резать посты

Правильно.
Бессодержательные, или заведомо ложные, каковым примером является [5], и вообще значительная часть постов Сергей М.


 
oxffff ©   (2007-12-10 16:44) [26]

Удалено модератором
Примечание: Оффтоп...


 
Rouse_ ©   (2007-12-10 16:46) [27]


> Бессодержательные, или заведомо ложные

Если считаешь это таковым - то просто предложы свою версию. Собачиться то зачем друг с другом? Ладно - проехали...



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

Текущий архив: 2008.08.24;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.019 c
4-1194943868
Niki
2007-11-13 11:51
2008.08.24
ListBox


2-1216372635
mahab
2008-07-18 13:17
2008.08.24
proxy


2-1216206248
Sashka
2008-07-16 15:04
2008.08.24
Пропадает Главное Меню при изменении ParentWindow


2-1216727543
aam
2008-07-22 15:52
2008.08.24
DDP файлы


15-1215265054
NaRuTo
2008-07-05 17:37
2008.08.24
IRC