|
|
|
Чтение из памяти |
|
|
ivanTu |
27.2.2015, 8:40
|
Apprentice
Сообщений: 128
Регистрация: 2.2.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.276
Возраст: 27
|
Цитата(DarkMaster @ 26.2.2015, 20:16) У вас скорее всего есть цепочка указателей и офсеты от каждого указателя указаны. Т.е. берете адрес + офсет1, считываете значение. В значении у вас будет указатель со следующим адресом, прибавляете к нему второй офсет и т.д.
Что то я никак не разберусь в последовательности действий, Уважаемый дарк покажи на пальцах, куда что и с чем, вот что есть. и кстате, тот адрес что выделен (базовый) я его вытащил из .Dll - ки процесса, и через PE tools взял его адрес, я про то что UoPilot читает адреса из dll процесса?
|
|
|
|
DarkMaster |
27.2.2015, 9:07
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27724
Пользователь №: 11.279
|
это печальная история... Мог, но релиз не состоялся т.к. исходники были утеряны... На данный момент пилот не может запросить начальный адрес блока дллки. Вся адресация у него только общая на процесс. С PE tools дело не имел, только с артмани. Надеюсь правильно вас понял, что адресация идет от начала дллки, но что-то больно цифры тогда большие. Если адресация все-таки общая на процесс, а судя по адресам это так, то схему я уже выше описывал. В данном случае это будет выглядеть примерно так: Код set #a 0x2B7BAF00 + 0x204 readmem #b #a D // В #b должен в данном случае упасть адрес 2BF033F70 // от вернувшегося адреса необходимо расчитать смещение set #b #b + 0x3A4 readmem #c #b D set #c #c +0x418 readmem #d #c D и т.д. Учтите, что значения при выводе в лог для отладки будут десятичными а не хексом. Для удобства можно использовать: Код // Вообще очень странная лапша из адресов. Обычно вперед-назад указатели не прыгают, а идут только вперед. Сообщение отредактировал DarkMaster - 27.2.2015, 9:07
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
5.3.2015, 11:27
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27724
Пользователь №: 11.279
|
Цитата Если ставлю строку "S" то выдает так же 0 не понимаю в чем дело
Ну причем тут S? Откуда она вообще взялась? Цитата используйте строковую переменную, а не числовую. Цитата добавил в команды 'readmem' и 'writemem' операции с числами с плавающей запятой Цитата F:float = 4b
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
5.3.2015, 13:03
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27724
Пользователь №: 11.279
|
Не совсем так. Если я правильно понимаю логику пилота, а здесь она не совсем адекватная, то все сравнение идет посимвольно кодами символов. Т.е. берем строку, лезем в ascii таблицу, переводим все символы в коды. http://www.cdrummond.qc.ca/cegep/informat/...ages/ASCII1.GIFТ.е. у нас получится вместо: 8.98880291 56 46 56 56 56 48 50 57 49 Далее из этого числа по одной цифре идет сравнение. Символ точки меньше значения цифры и это видимо как-то обрабатывается. Вообще трогать страшно. В общем и целом делать так крайне не рекомендую, это ну уж очень не корректно. Используйте trunc или round для приведения к целочисленному типу. Код if 9.0 > 9 log + else log - end_if Уже косяк. Сообщение отредактировал DarkMaster - 5.3.2015, 13:01
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|