Вверх ↑
Этот топик читают: Гость
Ответов: 1343
Рейтинг: 31
#1: 2014-05-28 19:36:27 ЛС | профиль | цитата
мучаюсь уже 2-й день...

надо просто сканить адреса от 401000 до 7FFFFFFF и найти по маске 1 адрес
если даже по 50000 адресов сканить одновременно то выходит что надо сканить очень долго... а надо в 1 клик, тоесть нажал кнопку и тут же он нашёл, если же брать память и сканить сразу по 5000000 то опять же толку 0 он зависает на на соединениии и на маске

code_33701.txt

подскажите хоть кто неть в какую сторону мне копать???
карма: 2

0
файлы: 1code_33701.txt [2.9KB] [232]
Ответов: 2059
Рейтинг: 132
#2: 2014-05-29 00:20:53 ЛС | профиль | цитата
Was ist das - сканить адреса? Как это будет по русски?
Это значения что ли по этим адресам?
Быстрее чем for I := 401000 to 401000 + Length do ничего не придумаешь.
И if ....then exit ;
I - конечно локальная переменная, которая на стеке.
while ... do и Repeat ... Until будет помедленней.
В заисимости, что сравниваем, тоже немножко можно в скорости выиграть, но не с Integer.
Понятно, что сравнивать один байт очень накладно! Быстрее будет наложить маску с нужным байтом.
Но и по простому, разницы не заметишь.
Через doWork и onEvent это маразм.
карма: 6

0
Ответов: 4631
Рейтинг: 749
#3: 2014-05-29 11:29:08 ЛС | профиль | цитата
flint2 писал(а):
Быстрее чем for I := 401000 to 401000 + Length do ничего не придумаешь.
Вообще-то, можно и придумать. Вроде, раньше кто-то выкладывал ссылку на код, в котором предлагалось искать только в занятых страницах памяти. Поскольку программа занимает не всю память, а под данные память выделяется блоками, то нужно перебирать только занятые блоки.
карма: 26

0
Ответов: 2059
Рейтинг: 132
#4: 2014-05-29 13:11:29 ЛС | профиль | цитата
Поскольку программа занимает не всю память, а под данные память выделяется блоками, то нужно перебирать только занятые блоки.

Разумеется.
Есть такой компонент PEAnalysis, через него и смотрим, чего надо.
Правда я не знаю, входит он в комплект поставки, или нет.
Я часто им пользуюсь.
карма: 6

0
Ответов: 1343
Рейтинг: 31
#5: 2014-05-29 15:29:28 ЛС | профиль | цитата
Netspirit писал(а):
искать только в занятых страницах памяти


хммм, спасибо попробую, это значительно облегчит поиск
но блин вот если попробовать исключать большие блоки в которых есть там 00 00 00... но как это сделать?
------------ Дoбавленo в 14.11:
flint2 писал(а):
Есть такой компонент PEAnalysis


чё то нехочет лезть в пакет delphi
------------ Дoбавленo в 14.26:
блин чё как назло нету точки Clear у компонента соединение строк в FTCG
------------ Дoбавленo в 15.29:
вот к примеру Cheat Engine ищет за несколько секунд точный адрес и причём написан он вроде на дельфи
карма: 2

0
Ответов: 2059
Рейтинг: 132
#6: 2014-05-29 18:40:04 ЛС | профиль | цитата
Rysik
Как это не хочет лезть в пакет delphi?
http://forum.hiasm.com/forum_serv.php?q=56&id=3752
карма: 6

0
Ответов: 1343
Рейтинг: 31
#7: 2014-05-29 19:18:24 ЛС | профиль | цитата
flint2 писал(а):

нехочет и всё, перекидываю конфиг в hiasm выбираю дельфи и вкладок нету а если пропишу пишет чё то ругаеться
аналогично бывает при добавлении компонента из другого пакета
------------ Дoбавленo в 19.18:
может посоветуешь как найти указатель на адрес?

адрес меняется после каждого раунда, присвоение идёт после старта раунда.
блок памяти в котором адрес появляется постоянно меняется

ну или хотя бы как маску нормальную сделать, а то надо ловить кое чё в раунде и одновременно искать. если сделать маску то сразу будет находить то что надо и уже гораздо лучше будет
карма: 2

0
Разработчик
Ответов: 4698
Рейтинг: 426
#8: 2014-05-29 20:10:12 ЛС | профиль | цитата
Rysik писал(а):
может посоветуешь как найти указатель на адрес?

Поиск по памяти значения, равного адресу, по которому лежит интересующее значение.
карма: 10
0
Ответов: 2059
Рейтинг: 132
#9: 2014-05-29 20:31:51 ЛС | профиль | цитата
может посоветуешь как найти указатель на адрес?

Assasin Дал очень толковый совет.
ну или хотя бы как маску нормальную сделать

А на что? На байт, бит, впрочем всё равно, "and" то что читаешь из памяти с твоей маской. Там, где нужно проверять - в маске должны быть единицы. т.е. 4 - проверяем третий бит, если байт то ff т.е 0000ff00 - второй байт.
карма: 6

0
Ответов: 1343
Рейтинг: 31
#10: 2014-05-29 21:38:30 ЛС | профиль | цитата
flint2 писал(а):
А на что? На байт, бит, впрочем всё равно, "and" то что читаешь из памяти с твоей маской. Там, где нужно проверять - в маске должны быть единицы. т.е. 4 - проверяем третий бит, если байт то ff т.е 0000ff00 - второй байт.


ничё непонятно...

наверно просто пользоваться вот этим


    Add(StrMask,8224973,623,301)
    {
    Mask="*0000ff00*"
    }

------------ Дoбавленo в 21.31:
да впрочем маску уже сделал, причём максимальную наверно, из 191 байта

это конечно упростило поиск того, что мне нужн,о но всё же как вот сделать так, что бы при чтении этих больших скоплений 00 00 00 00... , они удалялись и не лезли дальше в соединение строк?
------------ Дoбавленo в 21.38:
всё уже сделал простой replace ноликов колличество которых есть в маске но + ещё несколько дабы не портить маску и выходит так что будет думаю побыстрей работать
карма: 2

0
Ответов: 2059
Рейтинг: 132
#11: 2014-05-29 22:08:14 ЛС | профиль | цитата
Так откуда может быть известно, что тебе нужно сравнивать строки по маске? Нигде об этом и слова не было сказано.
Тогда что это за бред?
Mask="*0000ff00*"

Сначала надо понимать, что в конечном итоге надо конкретно, а не в терминах абстракции.
Тогда и вопросы будут внятные, на которые можно ответить.
да впрочем маску уже сделал, причём максимальную наверно, из 191 байта

Лихо ты лампочки с апельсинами скрещиваешь, но лампасинов не получится! Нет! Mask="*0000ff00*"
карма: 6

0
Ответов: 1841
Рейтинг: 369
#12: 2014-05-30 01:29:16 ЛС | профиль | цитата
Rysik писал(а):
Cheat Engine ищет за несколько секунд точный адрес

Вот основная часть, отвечающая за первоначальный поиск
code_33703.txt
Вообще, это напоминает спагетти-код, хотя и шустро работает:lol
------------ Дoбавленo в 00.57:
модуль memscan.pas, если что
------------ Дoбавленo в 01.12:
Вот так получаем дампы регионов памяти процесса.
...
while (Virtualqueryex(processhandle,pointer(currentBaseAddress),mbi,sizeof(mbi))<>0) and (currentBaseAddress<stopaddress) and ((currentBaseAddress+mbi.RegionSize)>currentBaseAddress) do //last check is done to see if it wasn't a 64-bit overflow.
begin
...
end;
...
------------ Дoбавленo в 01.29:
В общем, даже и не рассчитывайте на быстрый поиск без IC.
карма: 1
0
файлы: 1code_33703.txt [15.8KB] [263]
Гость
Ответов: 17029
Рейтинг: 0
#13: 2014-05-30 08:47:15 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-09 23:45:42
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#14: 2014-05-30 08:51:41 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-09 23:45:42
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#15: 2014-05-30 08:57:26 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-09 23:45:42
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)