Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
3 / 3 / 1
Регистрация: 05.05.2013
Сообщений: 143

Объясните значение трёх строк в коде

15.01.2015, 12:48. Показов 1969. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
DWORD* vtablePtr; //вот здесь, знак '*' обозначает, что это указатель?
 
vtablePtr = (PDWORD)(*((PDWORD)d3dDevice)); //Это вроде указатель на указатель?
 
endScene9 = vtablePtr[42] - (DWORD)hD3D9; // вот тут вообще дуб-дубом, что означает [42]? что будет, если заменить на [41]?
просто пишу d3d9 хук, но на PureBasic. В c++ всё скомпилировалось, работает, а вот как перевести на другой ЯП - хз
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2015, 12:48
Ответы с готовыми решениями:

Объясните смысл строк в коде (~20 строк)
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; int main() { char text; FILE *f =...

Объясните пожалуйста значение строк
Здравствуйте. Я недавно начал учить С# поэтому, возник такой вопрос. Просматривая уже готовый пример кода, я пытался понять, что значит та...

Объясните пожалуйста значение этих строк
Давно не писал ничего в Delphi, так что прошу кого-нибудь объяснить значение: enable := 0; if form1.CheckBox1.Checked then...

5
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
15.01.2015, 12:55
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от mcleshiy Посмотреть сообщение
вот здесь, знак '*' обозначает, что это указатель?
да
Цитата Сообщение от mcleshiy Посмотреть сообщение
(PDWORD)(*((PDWORD)d3dDevice)); //Это вроде указатель на указатель?
это получение значения по указателю и приведение типа к PDWORD. Похоже, что d3dDevice - это указатель на указатель, но явно в коде этого не видно.
Цитата Сообщение от mcleshiy Посмотреть сообщение
что означает [42]? что будет, если заменить на [41]?
индексация указателя. Получаем 42-ой (43-ий с нуля) элемент массива, на который указывает указатель. [41] соответственно будет 41-ый элемент массива.
1
Заблокирован
15.01.2015, 13:09
Цитата Сообщение от mcleshiy Посмотреть сообщение
DWORD* vtablePtr; //вот здесь, знак '*' обозначает, что это указатель?
Да, это указатель (неявно указывает на это буквы в название "Ptr" - pointer)
Цитата Сообщение от mcleshiy Посмотреть сообщение
vtablePtr = (PDWORD)(*((PDWORD)d3dDevice)); //Это вроде указатель на указатель?
PDWORD - это уже указатель, т.к.:
C++
1
typedef DWORD near          *PDWORD;
Так вот, смотри, справа на лево: приводишь указатель на устройство D3D - d3dDevice (это 99% указатель) к указателю на DWORD, то есть к PDWORD, это строки: (PDWORD)d3dDevice, тут фишка в том, что обычно, если хотят как то схитрить с указателем, его приводят к Long (он 4 байта как раз), а DWORD - это:
C++
1
typedef unsigned long       DWORD;
ну так вот, привёл ты d3dDevice к указателю на DWORD, то есть к PDWORD, далее смотри что у тебя:
*((PDWORD)d3dDevice), этой штукой ты разыменовываешь указатель, то есть берёшь значение по указателю. Что ты берёшь, а вот смотри, у тебя указатель на устройство DirectX D3D был d3dDevice, за этим указателем хер знает сколько данных о классе этого устройства, но ты взял и "испортил" указатель, точнее не испортил, а сделал его типом DWORD, то есть теперь это указатель на двойное слово, то есть за этим указатель известно только 4 байта, которые ты звёздочкой и пытаешься прочитать, то есть тут:
*((PDWORD)d3dDevice) ты читаешь 4 первых байта по адресу d3dDevice (этого можно было бы добиться и другим способом, но зачем? ).
Так, идём далее, по сколько ты хакер, ты знаешь, что в этих 4-х байтах храниться указатель судя по названию "vtablePtr" на таблицу виртуальных символов класса объекта d3dDevice, собственно ты эти 4 байта и преобразовывать в указатель на DWORD, который первой строчкой объявил.
Вот так вот.
Для используется эта таблица... Надо смотреть весь код, но если ты крутой хакер, то ты и так поймёшь (хотя, если б таковым являлся, ты б такие нубские вопросы тут не задавал )

Добавлено через 3 минуты
Цитата Сообщение от mcleshiy Посмотреть сообщение
endScene9 = vtablePtr[42] - (DWORD)hD3D9; // вот тут вообще дуб-дубом, что означает [42]? что будет, если заменить на [41]?
Тут, опять же, раз ты крутой хакер, то должен знать, что по смещению 42-х DWORD-вов, на 43-м (то есть смещение 42 * 4 = 168 байт) по указателю d3dDevice храниться какое - то нужное для твоего заккинга значение, из которого ты опять же вычитаешь DWORD, хрен знает зачем, надо код смотреть
1
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
15.01.2015, 13:34
DukeNukem,

Не по теме:

ну ты то точно "крутой хакер" ))

0
15.01.2015, 13:35

Не по теме:

Цитата Сообщение от Кудаив Посмотреть сообщение
ну ты то точно "крутой хакер" ))
не жалуюсь :)

0
3 / 3 / 1
Регистрация: 05.05.2013
Сообщений: 143
15.01.2015, 16:21  [ТС]
Цитата Сообщение от DukeNukem Посмотреть сообщение
раз ты крутой хакер
Извиняюсь, но что вы заладили про хакера. Ёпта, я парень семнадцати лет, насмотрелся видео уроков по программированию трейнеров у keng'а (Михаил Ремизов (kekekeng.blogspot.ru)) и подсел на программирование в бейсике (PureBasic).

Собсна, я с терминами не знаком, я понял лишь, что далёк от этого.
Можно как-то заменить вот это endScene9 = vtablePtr[42] - (DWORD)hD3D9; и, если можно, на другом ЯП?
А то... Туговато. Я лишь выяснил, что endScene равен 141215. Как это связать с vtablePtr[42]?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2015, 16:21
Помогаю со студенческими работами здесь

Расписать значение строк в коде
uses crt; Var s,s1,p:string; i:byte; t:char; Begin write('Введите строку: ');readln(s); ...

Прокомментировать - объяснить значение строк в коде
Этот код сделан под задание: Разработать прикладной протокол для передачи текстовых сообщений с помощью транспортного протокола UDP....

Для заданных трех строк S1, S2 и S3 напечатать те латинские буквы, которые входят только в одну из этих строк
Для заданных трех строк S1, S2 и S3 напечатать те латинские буквы, которые входят только в одну из этих строк. Указание: например, ввели...

Объясните строку в коде
Здравствуйте. Написал программу для нахождения корня методом золотого сечения. Меня интересует 1 вопрос в самом методе: строка if...

Объясните строчку в коде
#include <iostream> using namespace std; class Node{ public: int data; Node * next; Node *prev; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Камера 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