keng Опубликовано 20 сентября, 2011 Поделиться Опубликовано 20 сентября, 2011 Товарищи, я уже обгуглился, или просто очень хочу спать, но тем не менее. Делаю я, скажем, вот так:val1_on db 90h,90h,90h,90hЭто ок. Теперь хочу сделать вот так:val1_off db d8h,62h,24h,20h...и при попытке скомпилировать это месье компилятор принимает "d8h" не за безобидный байт, а за нечто непонятное - illegal instruction, как бы - и компилировать отказывается.Обнаружилось сие в WinAsm studio, попробовал с голым MASM 10 - то же самое, попрбовал на ХР (а не на 7) - то же самое. Что делать? Застрелиться? Выспаться? Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 20 сентября, 2011 Автор Поделиться Опубликовано 20 сентября, 2011 Самое смешное, что даже хайлайтер этого форума разными цветами подсвечивает "20h" и "d8h". Видимо, я что-то очень не так делаю, но раньше-то не было такого! ._. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 20 сентября, 2011 Поделиться Опубликовано 20 сентября, 2011 все просто. Масму нужен 0, если данные байтов начинаются с буквы. То есть, у тебя d8h надо записать как 0d8h Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 20 сентября, 2011 Поделиться Опубликовано 20 сентября, 2011 keng, если Masm нужен для трейнеров, то я рекомендую вместо этого способа создания трейнеров использовать сценарии Lua в CE и AA-скрипты.Чтобы создать заготовочную форму трейнера, тебе понадобится залезть в документацию и посмотреть как это сделать. captionWindow = 'My first Lua-trainer' function OnClose(sender) closeCE() return caFree end trainerForm = createForm() form_onClose(trainerForm, OnClose) control_setCaption(trainerForm, captionWindow) form_centerScreen(trainerForm)Более подробно здесь. Я очень жду официального появления CE Lua Engine 6.2, потому что в ней (в SDK) уже исправлены многие ошибки и появились новые возможности. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 20 сентября, 2011 Автор Поделиться Опубликовано 20 сентября, 2011 №3, до этого я уже догадался, но если сделать таким образом - WriteProcessMemory прекрасно этот ноль кушает и пытается записать. Т.е. пишет не "D8 62 24 20" (4 байта), а "0D 86 22 42".№4, LUA - это круто, но я скриптовые языки не перевариваю, да и раз уже есть готовый движок на масме - тем более.Буду дальше в документации копаться, не может это вот так внезапно перестать работать. Явно где-то ошибся. Самое смешное, что в fasm всё работает как часы, но masm мне просто привычнее. ): Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 20 сентября, 2011 Поделиться Опубликовано 20 сентября, 2011 Попробуй такval1_off db 0xd8,0x62, 0x24, 0x20 Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 20 сентября, 2011 Автор Поделиться Опубликовано 20 сентября, 2011 Сработала конструкция вида:val db 12hdb 12hdb 12hНо появилась проблема с записью. Продемонстрирую:Оригинальная инструкция:Пишем трейнером значение "90909090" (4 байта):Пишем оригинальные 4 байта назад (D8622420) и получаем вот это:Ясное дело, игра крашится. Внимание, вопрос: У меня настолько кривые руки, что три инструкции под fasm и tasm работают аки часы, а под masm работать отказываются?.. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 сентября, 2011 Поделиться Опубликовано 21 сентября, 2011 Оригинальные байты не (D8 62 24 20), а (D8 64 24 20). Надо было сравнить первый и последний скриншоты. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 21 сентября, 2011 Автор Поделиться Опубликовано 21 сентября, 2011 Да, я уже тоже заметил (на других-то опкодах работало). Всё, спасибо, топик закрывать можно.PS: А мне - побольше высыпаться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения