Bersy Wrote:.hpp]ISO C++11 переработанный вариант заголовочного файла патчера
ссылка, помоему, с самого начала мертвой была, ну или пару дней продержалась, так и не смог скачать посмотреть. Вот пишу об этом только сейчас.
насчет DIRECT_ и EXTENDED_
c DIRECT_ - все понятно.
а в EXTENDED_ - основной смысл не в том что мы функцию через мост вызываем, а в том что из тела функции можем получить аргументом указатель на экземпляр хука. В этом и расширенность хука.
А то что эта расширенность невозможна без моста, так это побочный эффект. Вот такая логика у меня была.
SAFE_ назван мной так для краткости, по моей логике должен называться SAFE_EXTENDED_ а еще правильнее WOG_SAFE_EXTENDED ))
Quote:ППЦ, чувствую себя магом.
...
Всё без макросов )))
к сожалению пишу в MS VS 2008, а в ней не поддерживается ISO C++ 11
в полной мере оценить красоту решения не могу.
Bersy Wrote:Меня в Делфийском SDK смущает строчка:
Code:
vtString: dword_args[i] := _dword_(PAnsiChar(AnsiString(VString^ + #0)));
Сложение строки с символом даёт временную строку в куче, которая уничтожается по завершению вычисления выражения. В итоге сохраняется указатель на опасный участок памяти.
Правильнее, наверное, будет оставить строку как есть.
Quote:В Делфийском SDK не потокобезопасен Call (глобальный массив аргументов).
Вы уж простите меня, но мой опыт работы с паскалем составлен из 3х этапов: 10класс школы, перевод исходников Хота на C++, написание SDK для патчера. Здесь лучше заняться исправлением улучшением и оптимизацией, опытному паскалисту/делфисту.
Bersy Wrote:Методы GetOriginalFunc, GetReturnAddress не потокобезопасны.
тогда получаются непотокобезопасны
методы Apply, ApplyInsert и Undo (у Patch/LoHook/HiHook)
т.к. может случится так что когда один поток будет стирать патч, другой будет ставить в это же место (а ставя он читает 'старый' код)
и вообще в это время может до этого места дойти выполнение модифицируемой программы.
Потокобезопасностью никогда не занимался.
Поможет ли создание одной единственной критической секции для всего патчера, и вход в нее когда пишем в код и в default_func???
если я правильно понял проблему....