fastmailsend Опубликовано 24 ноября, 2018 Поделиться Опубликовано 24 ноября, 2018 Имеется такой код: template <class cData> cData Read(DWORD dwAddress) { cData cRead; //Generic Variable To Store Data ReadProcessMemory(hProcess, (LPVOID)dwAddress, &cRead, sizeof(cData), NULL); //Win API - Reads Data At Specified Location return cRead; //Returns Value At Specified dwAddress } Как с помощью него можно считать строку, например имя в игре? если есть другой код, с радостью приму Ссылка на комментарий Поделиться на другие сайты Поделиться
fastmailsend Опубликовано 25 ноября, 2018 Автор Поделиться Опубликовано 25 ноября, 2018 подскажите пожалуйста, ничего рабочего не нашел Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 26 ноября, 2018 Поделиться Опубликовано 26 ноября, 2018 В MSDN почитай про функцию ReadProcessMemory и все сразу станет на свои места. Ссылка на комментарий Поделиться на другие сайты Поделиться
fastmailsend Опубликовано 26 ноября, 2018 Автор Поделиться Опубликовано 26 ноября, 2018 (изменено) Я понимаю, что 4 параметром нужно передавать размер, но как-то же Cheat Engine сама определяет размер строки. char buffer[12] = { 0 }; ReadProcessMemory(ads, (LPCVOID)0x275A3B5, &buffer, 12, 0); Функция не может выполнится, вызвав DWORD err = GetLastError(); возвращает 6 Процесс открыт с PROCESS_ALL_ACCESS Изменено 26 ноября, 2018 пользователем fastmailsend UPD Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 26 ноября, 2018 Поделиться Опубликовано 26 ноября, 2018 5 минут назад, fastmailsend сказал: Cheat Engine сама определяет размер строки sizeof ? Ссылка на комментарий Поделиться на другие сайты Поделиться
fastmailsend Опубликовано 26 ноября, 2018 Автор Поделиться Опубликовано 26 ноября, 2018 sizeof(string) сомневаюсь, что это сработает Что я не понимаю ? :c Ссылка на комментарий Поделиться на другие сайты Поделиться
fastmailsend Опубликовано 26 ноября, 2018 Автор Поделиться Опубликовано 26 ноября, 2018 Пишет, что неправильный хендл, хотя он правильный :c Ссылка на комментарий Поделиться на другие сайты Поделиться
fastmailsend Опубликовано 26 ноября, 2018 Автор Поделиться Опубликовано 26 ноября, 2018 int size = sizeof(string); string buffer; int returrn = ReadProcessMemory(ads, ((LPCVOID)(baseAddress + 0x105FA0)), &buffer, size, 0); DWORD af = GetLastError(); cout << buffer; пропускает первые 4 символа и пишет: ошибка при попытке чтения строки Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 26 ноября, 2018 Поделиться Опубликовано 26 ноября, 2018 Советую начать с https://msdn.microsoft.com/ru-ru/library/3bstk3k5.aspx char buf[24]; ReadProcessMemory(hProcess, reinterpret_cast<PBYTE*>(baseAddress + 0x105FA0), &buf, sizeof(buf), 0); count << buf << endl; Ссылка на комментарий Поделиться на другие сайты Поделиться
fastmailsend Опубликовано 26 ноября, 2018 Автор Поделиться Опубликовано 26 ноября, 2018 1 час назад, partoftheworlD сказал: Советую начать с https://msdn.microsoft.com/ru-ru/library/3bstk3k5.aspx char buf[24]; ReadProcessMemory(hProcess, reinterpret_cast<PBYTE*>(baseAddress + 0x105FA0), &buf, sizeof(buf), 0); count << buf << endl; Спасибо! Код работает!!! ) Извини, что я туповат, но если строка больше > 24 символов, он же ее не всю считает. Получается надо брать массив с размером 2147483647 (максимальное число вместимое int), а весь остаток он забьет нулями, ведь так? Только что, fastmailsend сказал: reinterpret_cast<PBYTE*> а зачем еще это? Ну, всмысле, чем это лучше моего способа? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 26 ноября, 2018 Поделиться Опубликовано 26 ноября, 2018 31 минуту назад, fastmailsend сказал: Ну, всмысле, чем это лучше моего способа? C шный стиль перебирает все виды преобразований и выбирает оптимальный, а использование reinterpret_cast, что-то типа строгого преобразования в определенный тип, а значит быстрее и мы ведь пишем на C++, так почему бы не воспользоваться его прелестями. А если ты про, типы, то LPCVOID это указатель на константу любого типа, но зачем нам любой тип, если мы точно знаем, что нам нужен указатель на байты. Опять же работает, чуть-чуть быстрее. Да и LPCVOID, может себя неадекватно вести, у меня такое было на практике, а PBYTE никогда не подводил ещё. 34 минуты назад, fastmailsend сказал: Получается надо брать массив с размером Нет, я не видел ещё задач где бы не хватало массива размером 1024 байта, обычно 64 байта хватает для всего. Ссылка на комментарий Поделиться на другие сайты Поделиться
fastmailsend Опубликовано 27 ноября, 2018 Автор Поделиться Опубликовано 27 ноября, 2018 Спасибо всем! 14 часов назад, partoftheworlD сказал: 15 часов назад, fastmailsend сказал: Получается надо брать массив с размером Нет, я не видел ещё задач где бы не хватало массива размером 1024 байта, обычно 64 байта хватает для всего. Думал вдруг существует определенные метод позволяющий хоть гиг загрузить Разобрался. Отдельное спасибо за 14 часов назад, partoftheworlD сказал: C шный стиль перебирает все виды преобразований и выбирает оптимальный, а использование reinterpret_cast, что-то типа строгого преобразования в определенный тип, а значит быстрее и мы ведь пишем на C++, так почему бы не воспользоваться его прелестями. А если ты про, типы, то LPCVOID это указатель на константу любого типа, но зачем нам любой тип, если мы точно знаем, что нам нужен указатель на байты. Опять же работает, чуть-чуть быстрее. Да и LPCVOID, может себя неадекватно вести, у меня такое было на практике, а PBYTE никогда не подводил ещё. Почему-то на ютубе/cocoscope все пользуются Сишным стилем, а никто толком и не объясняет) Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 27 ноября, 2018 Поделиться Опубликовано 27 ноября, 2018 19 минут назад, fastmailsend сказал: Думал вдруг существует определенные метод позволяющий хоть гиг загрузить Существует, напрямую выделять необходимое количество байт при необходимости используя один и тот же буфер, но с разным размером. 19 минут назад, fastmailsend сказал: Почему-то на ютубе/cocoscope все пользуются Сишным стилем, а никто толком и не объясняет) Сишный стиль для некоторых удобней, но как всегда есть либо удобный способ, либо правильный. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
fastmailsend Опубликовано 27 ноября, 2018 Автор Поделиться Опубликовано 27 ноября, 2018 Последний вопросец: template <class cData> cData Read(DWORD dwAddress) { cData cRead; //Generic Variable To Store Data ReadProcessMemory(hProcess, (LPVOID)dwAddress, &cRead, sizeof(cData), NULL); //Win API - Reads Data At Specified Location return cRead; //Returns Value At Specified dwAddress } Как можно передать в cData как массив символов? mem.Read<char[32]>(baseAddress + 0x105FA0); ругается Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 27 ноября, 2018 Поделиться Опубликовано 27 ноября, 2018 typedef struct { char array[32]; }t_array; mem.Read<t_array>(baseAddress + 0x105FA0); Вроде бы так должно заработать. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
fastmailsend Опубликовано 27 ноября, 2018 Автор Поделиться Опубликовано 27 ноября, 2018 Спасибо, все прекрасно работает! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения