кароче, игрался чтоб хотя бы самому понять. ну в 13-й я немного промахнулся с типизацией данных и оно сломалось в XP. сайчас вроде работает, я проверял.
выяснилось что мое "ниче не работает!!1" связано скорее с моей исключительной удачей тыкаться с проверкой по несуществующим или защищенным адресам
поэтому для тестов написал такой вот скриптец
#name "MemCheck"
define($cnt1, 0)
define($cnt2, 0)
$proc = 4660 // ID процесса; из диспетчера (или с формы)
$memKB = 62000 // объем памяти процесса в Кб.; из диспетчера
$addr = rnd(1, 1024 * $memKB)
$res = readmem($proc, $addr, 4)
if ($res != 0)
print("[", $addr, "] ", $res)
$data = $res - 1
writemem($proc, $addr, $data, 4)
$res = readmem($proc, $addr, 4)
print("[", $addr, "] ", $res)
if ($res = $data)
print(" writemem OK")
$cnt2 = $cnt2 + 1
else
print(" writemem fail")
end_if
$cnt1 = $cnt1 + 1
print("------ (",$cnt1,"/", $cnt2, ") ------")
end_if
waitms(100)
который просто долбится по рандомному адресу в процессе, ищет там ненулевое значение (что уже свидетельствует о работоспособности функции чтения) и перезаписывает его с проверкой (что опять же свидетельствует). так вот ряд программ отрабатывал на 99% успешно. ряд на 50%. ряд вообще не хотел сотрудничать. из чего я могу сделать вывод, что ну ооооочень индивидуально для каждого конкретного случая. часть адресов недоступена извне вообще. часть доступна только для чтения. кароч все очень сложна.
кто там любит поиграться с артмани и читенжн, отпишитесь плес заработало оно в хр или нет.
такие дела. пост актуален для последнего билда 4.13.011b из темы с бета версиями
p.s. ахтунг! пример скрипта почти сразу приводит к крашу испытуемого процесса.