RockHammer Опубликовано 8 июля, 2015 Поделиться Опубликовано 8 июля, 2015 Хочу узнать, существует ли какая-то команда, для сохранения значений регистра?К примеру, вот код:mov eax,xmm0mov [ebx],eax <- эта инструкция важная и её нельзя повредитьmov eax,[ebx]нужно сохранить то, что хранит в себе eax и после второй инструкции восстановить исходное значение в регистре eax. Ссылка на комментарий Поделиться на другие сайты Поделиться
AngrySchoolBoy Опубликовано 8 июля, 2015 Поделиться Опубликовано 8 июля, 2015 push eax//code herepop eaxИли нет? Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 8 июля, 2015 Поделиться Опубликовано 8 июля, 2015 pushad - сохранить регистры, popad - восстановить регистры. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 9 июля, 2015 Поделиться Опубликовано 9 июля, 2015 Привет! Можно и просто записать значение регистра в какой-нибудь адрес памяти, который можно указать заранее или создать через alloc. Инструкция - mov. А так, как верно сказал AngrySchoolBoy, сохранить можно и на стеке. Pushad же сохраняет на стеке регистры общего назначения. Если тебе нужно сохранить только один, то это не совсем рациональный подход. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 9 июля, 2015 Автор Поделиться Опубликовано 9 июля, 2015 (изменено) Привет! Можно и просто записать значение регистра в какой-нибудь адрес памяти, который можно указать заранее или создать через alloc. Инструкция - mov. А так, как верно сказал AngrySchoolBoy, сохранить можно и на стеке. Pushad же сохраняет на стеке регистры общего назначения. Если тебе нужно сохранить только один, то это не совсем рациональный подход.Я не знаю, как это правильней реализовать. Алгоритм должен быть такой:1. Сохранение оригинальных значений регистров2. Взлом/модифицкация нужного регистра3. Работа оригинальной инструкции (она не стирается, через неё проходит модифицированные данные)4. Восстановление оригинальных данных в регистрах~5. Удаление следов работы скрипта (необязательно, но было бы неплохо) P.s. суть моего алгоритма (метода) такова, что оригинальная инструкция некуда не девается. Мы просто обманываем её, подсовывая ей другие данные. Изменено 9 июля, 2015 пользователем RockHammer Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 9 июля, 2015 Поделиться Опубликовано 9 июля, 2015 Так что тебе мешает модифицировать ее входные данные, не трогая саму функцию? Сделать инъекцию кода выше и все. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 10 июля, 2015 Поделиться Опубликовано 10 июля, 2015 так покажи бооольше кода, что - куда, тогда может покажем КАК... Ссылка на комментарий Поделиться на другие сайты Поделиться
elvis66666 Опубликовано 11 июля, 2015 Поделиться Опубликовано 11 июля, 2015 (изменено) pushad Сохранение оригинальных значений регистровmov eax,xmm0 Взлом/модифицкация нужного регистраmov [ebx],eax Работа оригинальной инструкции (она не стирается, через неё проходит модифицированные данные)mov eax,[ebx]popad Восстановление оригинальных данных в регистрах ребята сверху все же разжевали и рассказали, действуй! Изменено 11 июля, 2015 пользователем elvis66666 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость kadabra888 Опубликовано 11 июля, 2015 Поделиться Опубликовано 11 июля, 2015 (изменено) Привет RockHammer!Как один из вариантов можешь попробовать так: Потом прописываешь переменную ShowEAX в таблицу СЕ и он тебе вежливо покажет содержимое регистра EAX. Но если инструкция работает с несколькими значениями/адресами, то надо делать фильтр(ну если этих адресов очень много). А если их там 2-3, то переменная будет прыгать между этими значениями[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)registersymbol(ShowEAX)label(ShowEAX)newmem:originalcode:mov eax,xmm0mov [ShowEAX],eax // вот тут ты и получаеш свой eax и выводишь его в переменную ShowEAXmov [ebx],eax // <- эта инструкция важная и её нельзя повредитьmov eax,[ebx]exit:jmp returnhereShowEAX:dd 0"prumer1.exe"+2B6AD: // тут твоя игра или что там у тебяjmp newmemnopreturnhere:[DISABLE]"prumer1.exe"+2B6AD: // тут восстановление при отключении скрипта(ну думаю тут и так все ясно)mov eax,xmm0mov [ebx],eaxmov eax,[ebx]dealloc(newmem)unregistersymbol(ShowEAX) Изменено 11 июля, 2015 пользователем kadabra888 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 11 июля, 2015 Поделиться Опубликовано 11 июля, 2015 Я не уверен, что ты именно хочешьmov eax,xmm0Т.к. eax это 32 разрядный регистр, а xmm0 это 128 разрядный регистр. Т.е. из xmm0 в eax может записаться не то чего ты хочешь, либо вообще это невозможно. Надо смотреть как ассемблируется или справочник. Про сохранение регистра можно использоваться push/pop инструкции. Выше писали об этом push eax // сохраняем eax// что-то делаем с eaxpop eax // восстанавливаем Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения