![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
а ebp ты где сохранишь перед восстановлением :)) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
Abyx, да ну?)) а если я запишу в адрес возрата своё что-нибудь)?
Даешь каждому плагину по отдельному процессу и пайпы (например) для обмена информацией !)) В любом случае вы не сможете защититься от хитрых (тупых) программистов которые косячат в плагинах и используют хаки - процесс-то один... плагин может тупо вызвать ExitProcess(0) идите - ловите.. Считаю что проверка стека и т.д. - избыточна, это микроскопом гвозди зибивать -- если плагин кривой, то он кривой, и тут уже ничего не сделать. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
хотя действительно, если вызываемая функция решит что у нее больше параметров чем должно быть, и если она начнет менять значения "параметров", то она может убить SEH фрейм. Тогда надо создавать новый стек. Добавлено через 33 секунды jonie, при чем тут адрес возврата? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
Abyx, функция может убить стек вообще (например если у функции 2-а параметра (указателя) куда она активно пишет, а вызывающий думает что 1)...
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
Во-первых прога не должна падать из за кривых плагинов. Это надо предусмотреть, иначе юзеры будут недовольны, когда прога будет молча падать на старте. Во вторых если разработчик плагина написал не тот прототип, неплохо чтобы прога ему это сообщила. Хороший пример - это COM. Передал неверное число параметров - получил соответствующее исключение, знаешь где ошибка. Добавлено через 31 секунду jonie, читайте пост выше |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
это и решает новый поток, хотя его нарушение по-моему ситуацию не меняет, т.к. этот стек в той же памяти процесса скорее всего поддержу jonie:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
впринципе да, можно ставить VEH и создавать новый поток, ловить исключение и убивать поток.
что случится со стеком потока - не важно. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ну и тут то же самое: COM-объект имеет свой динамический прототип, который можно переврать точно так же как и название функции при экспорте -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
GremlinProg, однако COM безопасен, и выдает информативные сообщения об ошибках
Это сообщение отредактировал(а) Abyx - 3.6.2010, 11:28 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
он безопасен на том же уровне, что и правильно написанный плагин
неправильно написанный COM небезопасен точно так же как и неправильно написанный плагин и ни какие методы самоконтроля COM тут не помогут: упадет точно так же единственная разница в том, что прототип COM-объекта модифицировать сложнее чем поменять имя экспортируемой функции, отсюда и видимая безопасность -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
|
||||
|
|||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
TCHAR - это вообще #define
|
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
xvr, хорошо, что сказали... сделаем так: std :: vector<std::basic_string<TCHAR> > => (unsigned int, TCHAR **), иными словами без стл сделаем
Добавлено через 1 минуту и 54 секунды
пускай будет wchar_t |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Кстати, plugin вполне может упасть не только при вызове неправильно оформленной функции, но и в процессе ее работы. Ошибки, они везде бывают
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
очень не советую передавать между exe и dll stl-классы, т.к. это будет нормально работать только если и то и то собрано одним и тем же компилятором, причём одной и той же версии SDK. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |