Magic Pointers («красивые» указатели на функции, вызов)

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2751
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 21.03.2014 (Пт) 23:15

arthur2 писал(а):Я предлагаю сделать, чтобы сама наша функция подмены использовала регистр.

Главное, чтобы компилятор понял, что она его меняет. А то, если не поймёт, то ещё хуже будет...

arthur2 писал(а):Для этого я предлагаю первую из наших болванок перенаправить как раз на эту самую функцию подмены.

В какой момент?


О! Похоже, я понял твою мысль.
Если сама подменящая функция объявлена тем же образом, что и подменяемые, то вызывая её, мы гарантируем, что в регистре не будет находится адрес функции, которую мы хотим подменить - просто из-за того, что там адрес подменяющей функции.
Классно!!! Изображение Изображение Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16039
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Magic Pointers («красивые» указатели на функции, вызов)

Сообщение Хакер » 22.03.2014 (Сб) 2:16

Qwertiy писал(а):Получается, что если мы аналогичным способом из функции подмены вызовем пустую функцию, то значение в регистре сотрётся и при вызове будет верный (т. е. подмёнённый) адрес.

Нет, регистр ESI входит в список регистров, которые по соглашению stdcall должны оставаться неизменными в результате вызова процедуры.

Qwertiy писал(а):А насколько рискованно сравнить текущее значение в регистре с тем адресом, который мы меняем, и при совпадении переписать регистр?

Тут не столько разговор о риске, сколько о запахе. К тому же с тем же успехом может использоваться EDI, если ESI занят подо что-то другое.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1598
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Magic Pointers («красивые» указатели на функции, вызов)

Сообщение arthur2 » 22.03.2014 (Сб) 10:33

Qwertiy писал(а):О! Похоже, я понял твою мысль.

Именно :) Но, похоже, что раз:
К тому же с тем же успехом может использоваться EDI, если ESI занят подо что-то другое.
то наша идея не проходит...
Хотя, опять же:
Если вызовов несколько, и они в одной процедуре, и подмена адреса в этой же процедуре, и один вызов уже состоялся, и ESI ничем не перезаписывается (например не перезаписывается необходимостью иметь адрес для вызова какой-то другой функции) — то облом.
Раз мы искусственно создали "необходимость иметь адрес для вызова какой-то другой функции" (функции подмены), вроде бы всё же не облом? В общем, чего-то Хакер моё предложение не прокомментировал :)
Артур
 
   

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1598
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Magic Pointers («красивые» указатели на функции, вызов)

Сообщение arthur2 » 25.03.2014 (Вт) 4:49

В общем, сделал так: задекларировал в самом себе и экспортировал CallEx, выдранную вот отсюда. Потом импортировал через тлб в себя же со всеми нужными мне декларациями.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16039
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Magic Pointers («красивые» указатели на функции, вызов)

Сообщение Хакер » 25.03.2014 (Вт) 22:57

Это какое-то издевательства.
Я абсолютно не понимаю, зачем приплетать сюда CallEx?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1598
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Magic Pointers («красивые» указатели на функции, вызов)

Сообщение arthur2 » 26.03.2014 (Ср) 5:15

Я же вроде объяснил - для вызова по указателю без инициализации рантайма, где Declare юзать нельзя :)
Артур
 
   

Пред.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList