Тема: AHK: Изменение данных в адресе процесса и их применение.
Здравствуйте, столкнулся с такой проблемой. Не получается записать в адрес новое значение. Но как сказать, записать получается, но вот применить, эти изменения, не получается.
Что я использовал, использовал я SAMP UDF (нажмите чтобы перейти к исходному файлу).
И так, вот моя функция которую я пытался написать:
newFunc(id) {
if(!checkHandles())
return false
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
if(ErrorLevel || dwPlayers==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwLocalPlayer := readDWORD(hGTA, dwAddress + 0x22)
if(ErrorLevel || dwPlayers==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
PlayerAnimID := readMem(hGTA, dwLocalPlayer + 4, 2)
if(ErrorLevel || dwPlayers==0) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
stOnFootData1 := ReadFloat(hGTA, dwLocalPlayer + 233 + id)
if(ErrorLevel || dwPlayers==0) {
ErrorLevel := ERROR_READ_MEMORY
return -2
}
dwFunc := dwLocalPlayer + 233 + 5
VarSetCapacity(nop, 4, 0)
NumPut("0.4", nop, 0, "Float")
NumPut(0xB9, injectData, 4, "UChar")
NumPut(dwFunc, injectData, 5, "UInt")
NumPut(0xE8, injectData, 9, "UChar")
offset := dwFunc - (pInjectFunc + 14)
NumPut(offset, injectData, 10, "Int")
NumPut(0xC3, injectData, 14, "UChar")
writeRaw(hGTA, pInjectFunc, &nop, dwLen)
if(ErrorLevel)
return false
hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
if(ErrorLevel)
return false
waitForSingleObject(hThread, 0xFFFFFFFF)
closeProcess(hThread)
return stOnFootData
}
Основной код записи в адрес: Вот это нужно отредактировать.
dwFunc := dwLocalPlayer + 233 + 5
VarSetCapacity(nop, 4, 0)
NumPut("0.4", nop, 0, "Float")
NumPut(0xB9, injectData, 4, "UChar")
NumPut(dwFunc, injectData, 5, "UInt")
NumPut(0xE8, injectData, 9, "UChar")
offset := dwFunc - (pInjectFunc + 14)
NumPut(offset, injectData, 10, "Int")
NumPut(0xC3, injectData, 14, "UChar")
writeRaw(hGTA, pInjectFunc, &nop, dwLen)
if(ErrorLevel)
return false
hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
if(ErrorLevel)
return false
waitForSingleObject(hThread, 0xFFFFFFFF)
closeProcess(hThread)
Структура просчитана верно и адрес со значением верный:
dwFunc := dwLocalPlayer + 233 + 5
Просто не получается применить эти изменения. Может у кого-то есть идеи как это все записать, исходный код SAMP UDF приложил выше, чтобы вы видели как что работает.
Теперь о адресе:
Адрес содержит в себе значение от 0 до 1 и его тип FLOAT
Если Вам нужно ещё больше информации, спрашивайте, постараюсь ответить на то что знаю.