vlad2033 Опубликовано 4 июля, 2014 Поделиться Опубликовано 4 июля, 2014 Всем прив хотел спросить про скрипт сравнения как он пишется.Я хочу сравнить две структуры нашёл отличия 1 и 0.Как писать фильтр.cmp ....а дальше сама инструкция Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 4 июля, 2014 Поделиться Опубликовано 4 июля, 2014 Всем прив хотел спросить про скрипт сравнения как он пишется.Я хочу сравнить две структуры нашёл отличия 1 и 0.Как писать фильтр.cmp ....а дальше сама инструкцияТут всё просто. Хорошо если сразу нашёлся правильный параметр.Например, по адресу eax+1C у игрока всегда 1, а у противников любое другое число, тогда скрипт для уменьшения здоровья только у врагов выглядит так:cmp [eax+1C],1 je exitвычитание здоровьяexit:... 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
vlad2033 Опубликовано 5 июля, 2014 Автор Поделиться Опубликовано 5 июля, 2014 Тут всё просто. Хорошо если сразу нашёлся правильный параметр.Например, по адресу eax+1C у игрока всегда 1, а у противников любое другое число, тогда скрипт для уменьшения здоровья только у врагов выглядит так:cmp [eax+1C],1je exitвычитание здоровьяexit:...Если сказать простым языком мне надо чтобы инструкция шла так1.если EDF+47 РАВНО 50 ТО2.ВЫПОЛНЯЕМ ОБЫЧНУЮ ИНСТРУКЦИЮ ТИПАMOV DSD+54MOV DFT+78А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПАMOV GGR+76 MOV FER+843.ВЫХОД ИЗ ИНСТРУКЦИИ Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 5 июля, 2014 Поделиться Опубликовано 5 июля, 2014 1.если EDF+47 РАВНО 50 ТО2.ВЫПОЛНЯЕМ ОБЫЧНУЮ ИНСТРУКЦИЮ ТИПАMOV DSD+54MOV DFT+78А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПАMOV GGR+76 MOV FER+843.ВЫХОД ИЗ ИНСТРУКЦИИВ общем-то да. Здесь путей несколько в зависимости от целей.1. Если параметр (не)равен, то выход.2. Если параметр (не)равен, то выполняем свои инструкции и выход.3. Если параметр (не)равен, то выполняем свои инструкции и далее оригинальные, выход. Ссылка на комментарий Поделиться на другие сайты Поделиться
vlad2033 Опубликовано 5 июля, 2014 Автор Поделиться Опубликовано 5 июля, 2014 В общем-то да. Здесь путей несколько в зависимости от целей.1. Если параметр (не)равен, то выход.2. Если параметр (не)равен, то выполняем свои инструкции и выход.3. Если параметр (не)равен, то выполняем свои инструкции и далее оригинальные, выход.Можеш написать шаблон к 3 на основе моего выше1.если EDF+47 РАВНО 50 ТО2.ВЫПОЛНЯЕМ ОБЫЧНУЮ ИНСТРУКЦИЮ ТИПАMOV DSD+54MOV DFT+78А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПАMOV GGR+76MOV FER+843.ВЫХОД ИЗ ИНСТРУКЦИИТоесть надо если параметр = 50 то выполняем одну инструкцию а если не равен другую Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 5 июля, 2014 Поделиться Опубликовано 5 июля, 2014 Можеш написать шаблон к 3 на основе моего выше1.если EDF+47 РАВНО 50 ТО2.ВЫПОЛНЯЕМ ОБЫЧНУЮ ИНСТРУКЦИЮ ТИПАMOV DSD+54MOV DFT+78А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПАMOV GGR+76MOV FER+843.ВЫХОД ИЗ ИНСТРУКЦИИТоесть надо если параметр = 50 то выполняем одну инструкцию а если не равен другуюесли EDF+47 РАВНО 50 ТО...А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПА...вот это не понял, два противоречивых сравнения, напишу ==50/ !=50орфография сохранена)cmp [EDF+47],#50jne branch2mov DSD+54 //если ==50mov DFT+78jmp exitbranch2: //если !=50mov GGR+76mov FER+84exit: Ссылка на комментарий Поделиться на другие сайты Поделиться
vlad2033 Опубликовано 5 июля, 2014 Автор Поделиться Опубликовано 5 июля, 2014 если EDF+47 РАВНО 50 ТО...А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПА...вот это не понял, два противоречивых сравнения, напишу ==50/ !=50орфография сохранена)cmp [EDF+47],#50jne branch2mov DSD+54 //если ==50mov DFT+78jmp exitbranch2: //если !=50mov GGR+76mov FER+84exit:спасиб Ссылка на комментарий Поделиться на другие сайты Поделиться
vlad2033 Опубликовано 5 июля, 2014 Автор Поделиться Опубликовано 5 июля, 2014 спасибпишет что нехочет компилировать jne branch2если EDF+47 РАВНО 50 ТО...А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПА...вот это не понял, два противоречивых сравнения, напишу ==50/ !=50орфография сохранена)пишет что нехочет компилировать jne branch2cmp [EDF+47],#50jne branch2mov DSD+54 //если ==50mov DFT+78jmp exitbranch2: //если !=50mov GGR+76mov FER+84exit:если EDF+47 РАВНО 50 ТО...А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПА...вот это не понял, два противоречивых сравнения, напишу ==50/ !=50орфография сохранена)cmp [EDF+47],#50jne branch2mov DSD+54 //если ==50mov DFT+78jmp exitbranch2: //если !=50mov GGR+76mov FER+84exit:если EDF+47 РАВНО 50 ТО...А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПА...вот это не понял, два противоречивых сравнения, напишу ==50/ !=50орфография сохранена)cmp [EDF+47],#50jne branch2mov DSD+54 //если ==50mov DFT+78jmp exitbranch2: //если !=50mov GGR+76mov FER+84exit:пишет что нехочет компилировать jne branch2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 5 июля, 2014 Поделиться Опубликовано 5 июля, 2014 branch2 - это метка, т.е. прежде, чем ее использовать в скрипте - ее надо объявить:alloc(newmem,2048)label(branch2) Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 5 июля, 2014 Поделиться Опубликовано 5 июля, 2014 branch2 - это метка, т.е. прежде, чем ее использовать в скрипте - ее надо объявить:alloc(newmem,2048)label(branch2)Я уже молчу про регистры) Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 5 июля, 2014 Поделиться Опубликовано 5 июля, 2014 Я уже молчу про регистры)Регистры? registersymbol имеешь в виду? А что там?)В секции активации скрипта - создал, в секции отключения скрипта - уничтожил. Вот в общем-то и все различие по поводу "жизни" таких флагов. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 5 июля, 2014 Поделиться Опубликовано 5 июля, 2014 Регистры? registersymbol имеешь в виду? А что там?)В секции активации скрипта - создал, в секции отключения скрипта - уничтожил. Вот в общем-то и все различие по поводу "жизни" таких флагов. Нет, я про EDF DSD DFT GGR FERИ про синтаксис mov Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 5 июля, 2014 Поделиться Опубликовано 5 июля, 2014 А, ну, у ТС ведь с метками беда сейчас... Как с регистрами проблемы будут - там застрелиться проще Ссылка на комментарий Поделиться на другие сайты Поделиться
vlad2033 Опубликовано 5 июля, 2014 Автор Поделиться Опубликовано 5 июля, 2014 Нет, я про EDF DSD DFT GGR FERИ про синтаксис movalloc(newmem,2048)label(branch2)label(returnhere)label(originalcode)label(exit)newmem:originalcode:cmp [ESI+67],(FLOAT)64jne branch2mov [esi+76],edxmov edx,[ebp-54]jmp exitbranch2:mov [esi+68],(FLOAT)100mov edx,[ebp-65]exit:jmp returnherтут всё так? Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 5 июля, 2014 Поделиться Опубликовано 5 июля, 2014 alloc(newmem,2048)label(branch2)label(returnhere)label(originalcode)label(exit)newmem:originalcode:cmp [ESI+67],(FLOAT)64jne branch2mov [esi+76],edxmov edx,[ebp-54]jmp exitbranch2:mov [esi+68],(FLOAT)100mov edx,[ebp-65]exit:jmp returnherтут всё так?Этот кусок правильный, только допиши e на конце jmp returnhere, метку originalcode и её объявление можешь убрать и если на выходе после метки exit сразу переход на returnhere можно сделать так:[убрать объявление метки exit]...mov edx,[ebp-54]jmp returnherebranch2:mov [esi+68],(FLOAT)100mov edx,[ebp-65]jmp returnhereНадеюсь куда return'ить уже написано) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения