![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
есть int который лежит в модуле "Mod" по rva 123
сначала я хочу присвоить ему указатель на функцию void foo_bar_hook() { ... } пишу HMODULE hMod = GetModuleHandleA("Mod"); *(int*)((int)hMod+123)=(int)&foo_bar_hook; и все работает ОК но вот захотелось мне вместо функции использовать метод class foo {...}; void foo::bar_hook() { ... } пишу *(int*)((int)hMod+123)=(int)&foo::bar_hook; и компилятор выдает ошибку что не может преобразовать void(foo::*)() к int как присвоить этому int'у указатель на метод? |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
и правильно делает.. Вот я в который раз удивляюсь, почему Вы выбрали C++, когда не используйте его инструментов, и который в ответ лишний раз Вам ограничивает свободу. преобразовать можно так :
но всю ответственность за дальнейшее использование и обратное преобразование компилятор перекладывает на Вас. Это сообщение отредактировал(а) mes - 9.12.2008, 15:46 |
||||
|
|||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
mes, а в одну строчку это както уместить можно?
а то с функцией я юзал дефайн, было очень удобно: #define HOOK_PTR(rva,hook) *(int*)((int)hMod+rva)=(int)&hook; ... HOOK_PTR(111,Func1_hook) HOOK_PTR(222,Func1_hook) HOOK_PTR(333,Func1_hook) ... а C++ я использую по вынужденным причинам, так юзал бы фасм и радовался жизни, вместо этого приходится бороться с конпелятором =\ |
|||
|
||||
Kallikanzarid |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
Можно юнион обернуть в класс.
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
если обернуть в шаблон , вот код вместе с тестовым использованием
|
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
нда.... всеже
#define HOOK_PTR(rva,hook) __asm mov [eax+rva],offset hook ... GetModuleHandleA("Mod"); HOOK_PTR(111,Func1_hook) HOOK_PTR(222,Func1_hook) HOOK_PTR(333,Func1_hook) ... малость покороче и понятнее будет |
|||
|
||||
UnrealMan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
Вот я в который раз удивляюсь, насколько хреновые предложения тут порой бывают ![]()
ты допустил довольно грубую ошибку, которая с большой вероятностью может убить программу даже если значение указателя достаточно мало, чтобы влезть в size_t. Это сообщение отредактировал(а) UnrealMan - 9.12.2008, 17:56 |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
какую ? с учетом того, что my_cast - преобразователь по битовому представлению без контроля компилятора на тип и размер, т.е. под ответственность программиста.
Это сообщение отредактировал(а) mes - 9.12.2008, 19:39 |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
mes, при разной длине типов при преобразовании из короткого в длинное будет мусор в оставшихся битах
Это сообщение отредактировал(а) J0ker - 9.12.2008, 20:06 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
но при обратном в то же самое из чего было преобразовано этот мусор не зацепится.. можно конечно и обнулять юнион перед началом преобразований. Это сообщение отредактировал(а) mes - 9.12.2008, 20:36 |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
добавил обнуление и проверку по размеру, чтоб длина результативной переменной была не меньше (можно поставить == ) исходной.
|
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
memset тоже можно запихать в какой-нить дефайн который включается только если конечный тип больше исходного
|
|||
|
||||
UnrealMan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
Т.е. твою ответственность - ты же этот способ предложил ![]()
Это для того, чтобы получился этакий облагороженный грязный хак, не работающий на большинстве машин? ![]() |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
насчет большинства машин, у автора оговорка была (правда не в этой теме), что его устраивает зависимое решение, для его задачи. Придумать другого вида преобразования которое требуется автору я пока не могу, если есть варианты тоже был бы рад услышать. согласен.. и стараюсь исправить недоделки, которые незаметил . Это сообщение отредактировал(а) mes - 9.12.2008, 21:47 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |