LuBu Опубликовано 29 сентября, 2021 Поделиться Опубликовано 29 сентября, 2021 Написал простенькую программу, которая содержит в себе вектор и 10 игроков, каждый игрок имеет показатель жизни. Раз в сек хпшка уменшается у кого то. Вообщем я нашел адрес нужного пользователя, нашел адрес вектора. Но не могу ни как найти статический указатель. Тот который зеленный. Делал все по инструкции как в роликах у данного канала. Любые идеи почему не получается найти зеленый адрес? Ссылка на комментарий Поделиться на другие сайты Поделиться
LuBu Опубликовано 29 сентября, 2021 Автор Поделиться Опубликовано 29 сентября, 2021 (изменено) int main() { // <- не могу найти std::vector<int> players; // 0x009D1242 этот адресс динамический, на данный момент имеет такой адрес .... Проблема в том что Find out what... на этом адресе ничего не показывает. Тоесть никаких инструкций не срабатывает Изменено 29 сентября, 2021 пользователем LuBu Ссылка на комментарий Поделиться на другие сайты Поделиться
KRYPTOPUNK Опубликовано 29 сентября, 2021 Поделиться Опубликовано 29 сентября, 2021 Скинь полный код под спойлером и где конкретно ты ловишь инструкции Ссылка на комментарий Поделиться на другие сайты Поделиться
Hack Опубликовано 29 сентября, 2021 Поделиться Опубликовано 29 сентября, 2021 так вектор у тебя в стеке Ссылка на комментарий Поделиться на другие сайты Поделиться
LuBu Опубликовано 30 сентября, 2021 Автор Поделиться Опубликовано 30 сентября, 2021 (изменено) 16 часов назад, KRYPTOPUNK сказал: Скинь полный код под спойлером и где конкретно ты ловишь инструкции Спойлер int main() { std::vector<int> players; for (int index = 0; index < 3; ++index) { players.push_back(index); } cout << &players << endl; bool isEnd = true; while (isEnd) { if (players.size() > 20) { //После 20 итераций, остальной вывод будет происходить с задержкой в 3 сек. sleep_for(milliseconds(3000)); } int temp = players[0]; players[0] = ++temp; if (temp % 3 == 0) { //Каждые 3 шага добавляется новый игрок int value = players[players.size() - 1]; players.push_back(++value); } cout << "Players Vector Addr: " << &players //Адрес созданого вектора << " Player Addr: " << &players[0] //Адрес 0 игрока, после того как вектор заполнится, адрес будет другой << " Player Value: " << players[0] //Значение 0 адреса << " Players Size: " << players.size() //кол-во игроков в векторе << endl; if (players.size() > 10000) isEnd = false; } return 0; } 1) Ищу значение которое есть у 0 игрока. Представим что это жизнь. 2) Спойлер 00935EA0 - 89 55 C8 - mov [ebp-38],edx 00935EA9 - 89 45 C8 - mov [ebp-38],eax 3) Спойлер 009354A0 - 55 - push ebp 00932436 - 89 4D FC - mov [ebp-04],ecx // <- Здесь указывается адрес вектора 009323F0 - 55 - push ebp 00932430 - 55 - push ebp 00935F0A - 68 30DB9300 - push 0093DB30 746E57CF - CC - int 3 746E6310 - 55 - push ebp 00931DA0 - 55 - push ebp 009335A0 - 55 - push ebp Спойлер TestC__.std::vector<int,std::allocator<int> >::size+6: 00932431 - 8B EC - mov ebp,esp 00932433 - 83 EC 08 - sub esp,08 00932436 - 89 4D FC - mov [ebp-04],ecx << 00932439 - 8B 45 FC - mov eax,[ebp-04] 0093243C - 89 45 F8 - mov [ebp-08],eax EAX=0000001F EBX=0081FB30 ECX=0081FB8C EDX=00000000 ESI=0081FB3C EDI=0081FB38 ESP=0081FB2C EBP=0081FB34 EIP=00932439 Далее я беру EBP=0081FB34 и ищу через HEX. В итоге адресов нет Изменено 30 сентября, 2021 пользователем LuBu Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 1 октября, 2021 Поделиться Опубликовано 1 октября, 2021 23 часа назад, LuBu сказал: Далее я беру EBP=0081FB34 и ищу через HEX EBP - это указатель на стек (как и ESP). Точнее, это типа базовый поинтер, и на текущую вершину стека может и не указывать. Но это технические детали, которые в данном случае не важны. Значения, которые проходят через этот регистр бесполезны (в плане использования как указатель, разумеется). А почему стек - потому что у тебя вектор объявлен как локальная по отношению к функции main переменная. Ссылка на комментарий Поделиться на другие сайты Поделиться
LuBu Опубликовано 1 октября, 2021 Автор Поделиться Опубликовано 1 октября, 2021 1 час назад, Xipho сказал: EBP - это указатель на стек (как и ESP). Точнее, это типа базовый поинтер, и на текущую вершину стека может и не указывать. Но это технические детали, которые в данном случае не важны. Значения, которые проходят через этот регистр бесполезны (в плане использования как указатель, разумеется). А почему стек - потому что у тебя вектор объявлен как локальная по отношению к функции main переменная. Тоесть если в игре все переменные объявлены как локальные, тоесть загруженные в стек. То никакого способа найти постоянный указатель нет? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 1 октября, 2021 Поделиться Опубликовано 1 октября, 2021 5 часов назад, LuBu сказал: если в игре все переменные объявлены как локальные, тоесть загруженные в стек. То никакого способа найти постоянный указатель нет? Найти - нет. Сделать - да. Ссылка на комментарий Поделиться на другие сайты Поделиться
LuBu Опубликовано 6 октября, 2021 Автор Поделиться Опубликовано 6 октября, 2021 можно закрыть Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения