1

Тема: 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

Если Вам нужно ещё больше информации, спрашивайте, постараюсь ответить на то что знаю.

2

Re: AHK: Изменение данных в адресе процесса и их применение.

tuma4ok, SAMP — это ведь игра, если я не ошибаюсь?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: yalanne, 2016-02-05 18:42:16)

Re: AHK: Изменение данных в адресе процесса и их применение.

teadrinker, Ага. Gta san andreas multiplayer.

4

Re: AHK: Изменение данных в адресе процесса и их применение.

teadrinker, но ведь суть - изменить данные в памяти процесса. Ну я и подумал что можно в этом разделе создать, ну раз вы перенесли, то я не против.

5

Re: AHK: Изменение данных в адресе процесса и их применение.

tuma4ok, вопросы сортируются по темам для удобства поиска теми, кто сталкивается с аналогичными проблемами. Замена данных в памяти обычно интересует как раз любителей игр, так что всё логично.

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: Alectric, 2016-02-05 19:16:05)

Re: AHK: Изменение данных в адресе процесса и их применение.

Работа с памятью.

Метод поиска.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

7

Re: AHK: Изменение данных в адресе процесса и их применение.

Alectric, cсылка, которую вы дали, мне не помогла. В том вопросе похожая проблема, но не совсем.
Вопрос все ещё актуален.