Что нового

Передача данных в ячейку памяти из дочернего процесса

ibender

Новичок
Сообщения
3
Репутация
0
Версия AutoIt: 3.3.12.0

Описание: Проблема следующая. Считываю карту памяти своего процесса. Выбираю произвольный адрес памяти (ругаться здесь не надо). Создаю структуру.
Код:
Local $aH[2]=[DllOpen('kernel32.dll')]
$av=DllCall($aH[0], 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 1, 'int', @AutoItPID)
$aH[1]=$av[0]
$iA='0x00ff0000'
$vB=DllStructCreate('dword')


Далее кладу в нее данные, например, 124. Перекидываю в ячейку памяти. Потом считываю ячейку - 124. Все норм
Код:
DllStructSetData($vB, 1, 124)
$x1=DllStructGetPtr($vB)
$x2=DllStructGetSize($vB)
DllCall(1, 'int', 'WriteProcessMemory', 'int', $aH[1], 'int', $iA, 'ptr', string($x1), 'int', $x2, 'int', '')
$res=_memoryread($iA, $aH)
ConsoleWrite($res&@CR)


Далее хочу изменить содержимое ячейки на 137 следующим образом (через дочерний процесс)
Код:
DllStructSetData($vB, 1, 137)
$x1=DllStructGetPtr($vB)
$x2=DllStructGetSize($vB)
$PID=Run(@AutoItExe & ' /AutoIt3ExecuteLine "'& _
'DllCall(1,''int'',''WriteProcessMemory'',''int'','''&$aH[1]&''',''int'','''&$iA&''',''ptr'','''&$x1&''',''int'','''&$x2&''',''int'','''')"')
$res=_memoryread($iA, $aH)
ConsoleWrite($res&@CR)


Содержимое ячейки не изменилось. Вопрос почему?

Примечания: Причем, если я запущу отдельную скомпилированную программу со строкой
Код:
DllCall(1, 'int', 'WriteProcessMemory', 'int', $aH[1], 'int', $iA, 'ptr', string($x1), 'int', $x2, 'int', '')

где указал пид процеса и адрес той же ячейки, то содержимое меняется нормально


Используйте для AutoIt кода тег [autoit]
autoit.gif

madmasles.
 
Верх