Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для DaVillka
-1 / 8 / 6
Регистрация: 31.10.2015
Сообщений: 151

Узнать адрес указателя

07.01.2017, 20:05. Показов 1788. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть функция в чужой программе, которая в качестве параметров принимает указатель на структуру. Вопрос, как узнать адрес этой структуры, если нельзя поставить сплайс на начало функции, так как там уже стоит чужой сплайс?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2017, 20:05
Ответы с готовыми решениями:

Как узнать адрес указателя?
(void *)str показывает адрес строки, а как узнать адрес указателя? char *str = "bla-bla-bla"; cout << "Value of str is:...

Как узнать адрес указателя на char?
Например, вот есть массив символов и указатель. И указателю присваиваем адрес этого массива. А как узнать адрес самого указателя? char...

Адрес объекта, адрес указателя. Где что находится?
#include <iostream> void Foo(int* val) { std::cout << val << " " << *val << " " << &val << '\n'; } void Bar(int* &val) ...

26
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.01.2017, 20:26
С каких это пор один сплайс является помехой для другого?
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
07.01.2017, 20:41
Цитата Сообщение от Убежденный Посмотреть сообщение
С каких это пор один сплайс является помехой для другого?
Смотря какой сплайс, может там jmp/jcc или rip-адресация. Пересчитывать придется.

Добавлено через 10 минут
Цитата Сообщение от DaVillka Посмотреть сообщение
Вопрос, как узнать адрес этой структуры, если нельзя поставить сплайс на начало функции
Ну, сплайсинг не единственный метод. Есть ещё: хот патч, точки останова, патч таблицы импорта.
0
 Аватар для DaVillka
-1 / 8 / 6
Регистрация: 31.10.2015
Сообщений: 151
07.01.2017, 20:43  [ТС]
Убежденный, ну вообще да, но в данном случае нельзя поставить, ибо та прога что ставит сплайс проверяет его наличие, если поставить поверх, то выкинет из проги, можно поставить за ним свой, но тогда в качестве указателя будет не то что нужно
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.01.2017, 20:59
Цитата Сообщение от jupman Посмотреть сообщение
Смотря какой сплайс, может там jmp/jcc или rip-адресация. Пересчитывать придется.
Также не вижу проблемы. Все нормальные библиотеки для перехватов умеют
обрабатывать такие ситуации. Да и без сторонних либ можно просто сделать
хак под конкретную реализацию чужого сплайса.

Цитата Сообщение от DaVillka Посмотреть сообщение
в данном случае нельзя поставить, ибо та прога что ставит сплайс проверяет его наличие, если поставить поверх, то выкинет из проги
Тогда надо сначала поставить сплайс на проверку сплайса, а потом засплайсить сам сплайс
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
07.01.2017, 20:59
Цитата Сообщение от DaVillka Посмотреть сообщение
Убежденный, ну вообще да, но в данном случае нельзя поставить, ибо та прога что ставит сплайс проверяет его наличие, если поставить поверх, то выкинет из проги, можно поставить за ним свой, но тогда в качестве указателя будет не то что нужно
А вы попробуйте хукнуть код хука. Ну, то есть, чужая прога внедряет jmp на свой перехватчик. А вы по адресу этого jmp пройдите и прям туда впихните свой jmp.
0
 Аватар для DaVillka
-1 / 8 / 6
Регистрация: 31.10.2015
Сообщений: 151
07.01.2017, 21:04  [ТС]
Renji, да там стоит еще один од хук) и тоже проверяется, и дальше тоже проверяется )

Добавлено через 1 минуту
Убежденный, но я не знаю как проверяется наличие сплайса, а если поставить свой сплайс после ихнего, то нельзя как то узнать адрес ?
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
07.01.2017, 21:06
Цитата Сообщение от Renji Посмотреть сообщение
А вы попробуйте хукнуть код хука. Ну, то есть, чужая прога внедряет jmp на свой перехватчик. А вы по адресу этого jmp пройдите и прям туда впихните свой jmp.
А потом сторонний код будет снимать хук и вырвет нам почву из под ног.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.01.2017, 21:10
А нельзя ли поставить свой сплайс раньше чужого?
0
 Аватар для DaVillka
-1 / 8 / 6
Регистрация: 31.10.2015
Сообщений: 151
07.01.2017, 21:14  [ТС]
Убежденный, можно, но его же вроде как все равно перепишет чужой сплайс ? Оо
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
07.01.2017, 21:28
Цитата Сообщение от Renji Посмотреть сообщение
А вы попробуйте хукнуть код хука. Ну, то есть, чужая прога внедряет jmp на свой перехватчик. А вы по адресу этого jmp пройдите и прям туда впихните свой jmp.
Цитата Сообщение от jupman Посмотреть сообщение
А потом сторонний код будет снимать хук и вырвет нам почву из под ног.
Renji, Я сглупил, так можно сделать. Вы все верно говорите.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
07.01.2017, 21:54
Извините что залез в чужую тему, а что такое сплайс? Гугл ничего толком не выдал
Это из оперы ассемблера?
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
07.01.2017, 21:57
Цитата Сообщение от Убежденный Посмотреть сообщение
Также не вижу проблемы. Все нормальные библиотеки для перехватов умеют
обрабатывать такие ситуации. Да и без сторонних либ можно просто сделать
хак под конкретную реализацию чужого сплайса.
Да, знаю что либы умеют. Просто помню ТС создавал тему про пересчет джампа, поэтому думаю у него свой велосипед.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.01.2017, 21:59
Цитата Сообщение от DaVillka Посмотреть сообщение
я не знаю как проверяется наличие сплайса, а если поставить свой сплайс после ихнего, то нельзя как то узнать адрес ?
А откуда ты знаешь, что чужой сплайс проверяется?
Может быть, твой сплайс реализован некорректно и из-за этого все валится?..

Цитата Сообщение от jupman Посмотреть сообщение
Просто помню ТС создавал тему про пересчет джампа, поэтому думаю у него свой велосипед.
Ага, вот и я стал что-то в таком духе подозревать.
Свой сплайсинг, свой дизасм, что-то вдруг падает, только непонятно где...
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
07.01.2017, 22:00
sys_beginner, перехват посредством модификации тела функции (патч кода)
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.01.2017, 22:01
Цитата Сообщение от sys_beginner Посмотреть сообщение
а что такое сплайс?
Сплайсингом называют перехват функций через правку (патчинг) их тела.
Обычно первые несколько байт заменяются jmp с переходом на свой обработчик.
А обработчик, выполнив свою работу, прыгает на "трамплин" (или, как его
еще называют иногда, bridge), который выполняет "украденные" инструкции из
первых байт, чтобы восстановить контекст, так сказать, а затем переходит на
остаток оригинальной функции. В деталях техника может различаться, но
общий принцип примерно такой.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
07.01.2017, 22:09
Убежденный,
Т.е когда выполняется функция, где то хранится адрес возврата в определенный контекст для продолжения выполнения программы. На уровне ассемблера можно подменить этот адрес, выполнить какой то код, а потом снова вернуться к продолжению программы?

Интересно где это может пригодится. Почему просто нельзя вызвать функцию а после нее другую функцию которая сделает то что делается при перехвате и до восстановления контекста
0
 Аватар для DaVillka
-1 / 8 / 6
Регистрация: 31.10.2015
Сообщений: 151
07.01.2017, 22:14  [ТС]
Убежденный, jupman, да, у меня свой велосипед, со сплайсами все в порядке, это у них такой защитный механизм, если по адресу стоит не их сплайс а что то другое, то рушит процесс, и да, вопрос можно закрыть, я подменил функцию в таблице импорта(хоть и там то же есть камни, но они никак не относятся к тому, что я в результате смог получить)

Добавлено через 3 минуты
sys_beginner, ну дак в функции, в основном, передаются какие то параметры, без которых весь процесс может рухнуть, на пример виртуальные функции ты так просто не вызовешь, тебе нужно хукнуть функцию какую то, и сохранить this
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.01.2017, 22:16
Цитата Сообщение от sys_beginner Посмотреть сообщение
Т.е когда выполняется функция, где то хранится адрес возврата в определенный контекст для продолжения выполнения программы. На уровне ассемблера можно подменить этот адрес, выполнить какой то код, а потом снова вернуться к продолжению программы?
Это ты описываешь технику под названием ROP (Return-Oriented Programming)
А сплайсинг - несколько другое, его суть именно в перезаписи тела функции, -
обычно первых нескольких байт, - своим кодом, обычно прыжком на свой обработчик.

Интересно где это может пригодится.
Да много где. Когда тебе, например, нужно слегка изменить поведение какой-то программы.

Почему просто нельзя вызвать функцию а после нее другую функцию которая сделает то что делается при перехвате и до восстановления контекста
Потому что функцию вызываем не мы, ее вызывает чужой код, и когда он это делает - мы точно не знаем.
Мы лишь гости в этом мире процессе...
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
07.01.2017, 22:17
Цитата Сообщение от DaVillka Посмотреть сообщение
ну дак в функции, в основном, передаются какие то параметры, без которых весь процесс может рухнуть
Не понял, если в функцию не были переданы обязательные параметры, то программа не скомпилируется
А если это логическая ошибка то просто нужно пофиксить

Цитата Сообщение от DaVillka Посмотреть сообщение
на пример виртуальные функции ты так просто не вызовешь, тебе нужно хукнуть функцию какую то, и сохранить this
Почему не вызову? obj.virtualMethod(); какие проблемы? А this будет указывать на текущий объект
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2017, 22:17
Помогаю со студенческими работами здесь

Изменить адрес указателя
Подскажите пожалуйста, как изменить не только адрес куда указывает указатель, но и адрес самого указателя Для примера: char...

Сменить адрес указателя
Подскажите пожалуйста, допустим есть 2 массива A и B с 2-я указателями на них a и b. могу ли я сменить адрес указателя а на массив B, после...

Сменить адрес указателя
У меня есть переменная v. Как сделать так, что бы в некоторый момент времени она равнялась какому-то "своему" значению, а в...

Изменить адрес указателя на функцию
void ShowNumber(int number) { printf("number = %d\n", number); } void (*gFuncPointer)(int) = (void(*)(int)) (((int*)ShowNumber)...

Получить адрес указателя на функцию
int(*ptr)(int) = &abs; cout << "&abs = " << &ptr << endl; cout << "&ptr = " << endl; Собственно, вопрос в заголовке. Хотя я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru