budabum Опубликовано 10 марта, 2018 Поделиться Опубликовано 10 марта, 2018 (изменено) есть у меня кусок кода который я копирую в alloc память внутри перенесённого кода есть call. встал вопрос о пересчёте смещения внутри этого call. как наиболее бескровно это сделать? E8 EE15FCFF - call 14212CC10 попробовал в дебаггере сделать вручную - всё верно. а как это теперь сделать в AA или в LUA? задача усложняется, что я не могу в AA написать call 14212CC10, чит делается совместимым с разными версиями и этот кол будет разным на разных версиях игры я вижу, что надо будет сделать как-то readasm и потом как-то readmem Изменено 10 марта, 2018 пользователем budabum Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 10 марта, 2018 Поделиться Опубликовано 10 марта, 2018 После опкода Е8 дальше идет смещение до нужного адреса. Алгоритм будет примерно следующий 1. Взять адрес инструкции с этим оригинальным коллом 2. Прибавить к нему взятое опкодов смещение. 3. Записать куда-нибудь полученный адрес 4. Взять адрес инструкции колла в кодкейве (выделенной памяти) 5. Вычесть его из записанного на третьем шаге адреса 6. Записать полученное смещение в опкоды инструкции колла в кодкейве. Ссылка на комментарий Поделиться на другие сайты Поделиться
budabum Опубликовано 10 марта, 2018 Автор Поделиться Опубликовано 10 марта, 2018 ну, т.е. сделать рассчёты вручную. я по наивности рассчитывал что есть что-то в движке самого CE. если ничего другого нету, придётся пойит этим путём. спасибо. пока пошёл так делать. Ссылка на комментарий Поделиться на другие сайты Поделиться
budabum Опубликовано 10 марта, 2018 Автор Поделиться Опубликовано 10 марта, 2018 пока думал как на коленке написать рассчёт адреса, как на глаза попалась AA инструкция reassemble. в общем это и есть тот самый recalculate при переносе относительного кода. reassemble(address) 2 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 10 марта, 2018 Поделиться Опубликовано 10 марта, 2018 Не знал про эту инструкцию. Запрятали Спойлер alloc(memTestMemory, 0x400) registerSymbol(memTestMemory) memTestMemory: reassemble("Tutorial-i386.exe"+24B25) reassemble("Tutorial-i386.exe"+24B29) reassemble("Tutorial-i386.exe"+24B2D) //// Read Memory // Tutorial-i386.exe+24B25 - 83 45 EC 01 - add dword ptr [ebp-14],01 // Tutorial-i386.exe+24B29 - 83 7D EC 64 - cmp dword ptr [ebp-14],64 // Tutorial-i386.exe+24B2D - 74 02 - je Tutorial-i386.exe+24B31 //// Assembled Memory // memTestMemory - 83 45 EC 01 - add dword ptr [ebp-14],01 // 003F0004 - 83 7D EC 64 - cmp dword ptr [ebp-14],64 // 003F0008 - 0F84 234B0300 - je Tutorial-i386.exe+24B31 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 11 марта, 2018 Поделиться Опубликовано 11 марта, 2018 23 часа назад, budabum сказал: AA инструкция reassemble Это все конечно круто, но я стараюсь обходиться только стандартными ассемблерными приемами, потому что их можно безболезненно перенести в код трейнера на любом подходящем языке. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения