-
Игорь Шевченко © (08.05.08 14:24) [39]
Все модные компиляторы умеют обходиться без лишнего jmp, чем Delphi хуже? :)
-
> чем Delphi хуже?
Как однажды сказал ЮЗ: "все-же плюсы Delphi не в его названии" ;)
-
Тыщ © (08.05.08 14:27) [40]
Не скажи - это невыгодно. Так загрузчику в одном месте менять ссылку на импортируемую функцию, а так в сотне мест. Таблица relocation распухает
-
Игорь Шевченко © (08.05.08 14:31) [42]
Согласен, но это в случае dll. В exe-шниках relocation ни к чему.
-
> Тыщ © (08.05.08 14:27) [40]
> Игорь Шевченко © (08.05.08 14:24) [39]
>
> Все модные компиляторы умеют обходиться без лишнего jmp,
> чем Delphi хуже? :)
А я бы даже сказал, что это может обернутся преимуществом.
Единый промежуточный порт,
например для единого перехвата может используется отладчиком для функции через таблицу импорта.
ЗЫ. Хотя действительно в Release версии можно убирать. По флагу например.
-
> В exe-шниках relocation ни к чему.
Экзешник тоже может экспортировать функции и может быть подгружен не по стандартному адресу ;)
-
Rouse_ © (08.05.08 14:36) [45]
Не будем вдаваться в подробности. Relocation не нужен для обычных, ничего не экспортирующих exe-шников, а таких большинство.
-
oxffff © (08.05.08 14:36) [44]
Ну так можно и dword в таблице импорта поменять, тот же перехват.
-
> Тыщ © (08.05.08 14:38) [46]
> Rouse_ © (08.05.08 14:36) [45]
>
> Не будем вдаваться в подробности. Relocation не нужен для
> обычных, ничего не экспортирующих exe-шников, а таких большинство.
>
Если таблица импорта съедет, то будешь править все CALL [API].
-
oxffff © (08.05.08 14:39) [48]
> Если таблица импорта съедет
Как она может съехать?
-
> Тыщ © (08.05.08 14:39) [47]
> oxffff © (08.05.08 14:36) [44]
>
> Ну так можно и dword в таблице импорта поменять, тот же
> перехват.
Тогда будет перехватываться все.
А как быть в разными dcu?
Если нужно перехватывать только вызовы одного DCU.
-
oxffff © (08.05.08 14:43) [50]
Уж сильно специфический случай.
-
> Тыщ © (08.05.08 14:41) [49]
> oxffff © (08.05.08 14:39) [48]
>
> > Если таблица импорта съедет
>
> Как она может съехать?
А что есть гарантия, что она всегда на том же месте?
Секция съедет и таблица вместе с ней.
-
oxffff © (08.05.08 14:43) [50]
Ах да, выяснилось еще одно - хотелось бы, чтоб вызовы одинаковых API из разных DCU объединялись. А то доходит до того, что kernel32.dll в таблице упомянут по 5 раз...
-
oxffff © (08.05.08 14:45) [52]
> А что есть гарантия, что она всегда на том же месте?
> Секция съедет и таблица вместе с ней.
А если секция кода съедет? Пиши пропало.
-
> А если секция кода съедет? Пиши пропало.
Почему? Reloc поправит все.
-
oxffff © (08.05.08 14:50) [55]
Ах, вон ты о чем. Про это было сказано в [43].
А секции друг относительно друга всегда неподвижны.
-
> Как однажды сказал ЮЗ: "все-же плюсы Delphi не в его названии"
> ;)
Зато теперь будут смеяться конкуренты, странное для русского слуха имя, я даже представляю как нас теперь будут называть, вместо благородного греческого имени.
-
-
> Экзешник тоже может экспортировать функции и может быть
> подгружен не по стандартному адресу ;)
Так вроде же виндовый загрузчик все равно игнорирует и таблицу импорта экзешника, и таблицу релокации.