![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
STL полностью открыта STL специфицируется стандартом C++ и должна работать одинаково во всех реализациях (включая время выполнения операций). А реализация от M$ не худшая. -------------------- ![]() |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Вполне возможно...
Как минимум, добровольный отказ от STL наталкивает на эту мысль. Добавлено @ 00:39
Это сообщение отредактировал(а) Леопольд - 5.8.2010, 00:39 -------------------- вопросов больше чем ответов |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Имхо, к проблеме Вы подошли не с той стороны.. Вопрос нужно было задавать не о том, как запомнить адрес виртуальной функции, а о том как можно решить ту задачу, для который Вы решили запоминать функции... что именно Вам нужно непонятно, но посмотрите это : http://codepad.org/edtM5QhB |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Когда у меня был опыт работы на С++ 5-7-ми лет, я с удивлением открыл для себя, что я не знаю языка - тоже не знал STL. Более того, сейчас я знаю и STL, и boost умею пользоваться, но опять же, не могу утверждать, что я отлично знаю С++. То что ты пытаешься использовать vtable это вообще называется "грязный хак". И применять его в не академических целях мягко говоря глупо. Я, честно говоря, так и не понял, зачем нужен этот MS Detours. Но есть подозрение, что это тоже сродни "грязному хаку". Кстати, если тебе нужно ловить начало выполнения определенных методов, то можешь в них воткнуть вызов какой-то пустой внешней функции, адрес которой и передашь этому detours. |
|||
|
||||
Abyx |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
собственно вам следовало с этого и начинать, и не писать "грязный хак" и т.п. если бы вы знали зачем нужен Detours, в каких случаях он применим, вы бы не писали про хаки. перехват функций подразумевает знание особенностей кода который перехватывается, так что это совсем не хак. если надо перехватывать код в чужой 32разрядной программе скомпилированной VC++, то очевидно что там не будет проблем с тем что у уже скомпилированной программы внезапно поменяется разрядность и компилятор. |
|||
|
||||
icecrashldr |
|
|||
![]() Developer ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 5.7.2010 Репутация: нет Всего: нет |
Может быть стоит использовать dbgeng?
Апи предоставляется из пакета Debugging Tool for Windows, и это "отладчик-апи" хорошо совместно с Visual studio. Поставить бряки и дело то с концом ... |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
Abyx |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
mes,
1. ТС написал что он перехватывает функцию и использует Detours. Это вполне достаточно чтобы понять задание. 2. что есть хак? поведение компилятора полностью определено документацией компилятора. как устроена vftable у MSVC написано в документации MSVC и множестве статей, в том числе и от MS. где тут хак? 3. писать о том в чем не разбираешься - это не есть хорошо. особенно писать "я не знаю что это такое но это плохо" |
|||
|
||||
Modul |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Вот и я о том же говорил. Нужно правильно задачу поставить, а не писать - мне нужно...вызвать закорючку. Т.е. человеку кажется, что он прав. А как можно даже с заказчиком вести разговор, если он не может ее сформулировать ! ![]() --------------------
I'll be back ! |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а где сказано что компилятoр MSVC(кроме косвенных упоминаний таких как thiscall), и что остальные рассматривать не надо ?.. грубо: то что делается в обход предусмотренного способа использования. ![]() |
|||
|
||||
Abyx |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
разговор скатился в никуда. ТС вроде как решил свою задачу, а вы обсуждаете хз что %)
|
|||
|
||||
asd |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 25.6.2006 Репутация: нет Всего: 1 |
MrLukS,
Если вам нужно перехватить какую-то ф-ию в классе, то может сделать так? class SomeClass2: public SomeClass { public: virtual void SomeFunc(int SomeParam) { ... SomeClass::SomeFunc(int SomeParam); ... } }; и юзать SomeClass2 вместо SomeClass |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
asd |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 25.6.2006 Репутация: нет Всего: 1 |
Прочитал ещё раз. Так про что речь? Про то что надо во что бы то ни стало получить указатель на метод, чтобы передать его в дллку для логирования? Ну, да, тогда мой пост вообще мимо кассы. Но, имхо, логировать действия своего кода с помощью сторонней либки, как-то странно.
|
|||
|
||||
Abyx |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
"логирование" - теперь это так называется ))
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |