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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.039 c
2-1216717555
Vlad Oshin
2008-07-22 13:05
2008.08.24
то работает, то не работает. Не объясните почему?


15-1214779348
Германн
2008-06-30 02:42
2008.08.24
Поддержим отечественных производителей ПО. Часть 2.


2-1216632103
Оксана Вл.
2008-07-21 13:21
2008.08.24
Курсор в таблице


15-1215454118
@!!ex
2008-07-07 22:08
2008.08.24
Запуск колладйера отложили?


4-1195060503
Niki
2007-11-14 20:15
2008.08.24
Окна потока





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