Wake of Gods Forum | Форум Во Имя Богов

Full Version: Исследование героев
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Лучше
MOVZX EAX, [A];
Потому что команда
MOV AL, [A];
не изменяет старшие 24 бита и если там что-то было, то так и останется.
EAX = 0x12345678; MOV AL, BYTE PTR [A]; => EAX = 0x12345601;
EAX = 0x12345678; MOVZX EAX, BYTE PTR [A]; => EAX = 0x00000001;
(11.02.2011 01:08)Berserker Wrote: [ -> ]A - константа?
Нет. Вычисляется из указателя.
etoprostoya Wrote:MOVZX EAX, [A];
А для word есть аналогичная?
etoprostoya, исправил и взял на заметку. Ab

Sav, похоже, есть: http://faydoc.tripod.com/cpu/movzx.htm
А управлять через ассемблер как? Код разный, а команда одна и та же.
movzx eax, x
где x - переменная запишет в eax байт или слово?
Думаю, MOVZX EAX, BYTE [x] // MOVZX EAX, WORD [x] // MOVZX EAX, DWORD [x].
Quote:0F B6 / r MOVZX r16,r/m8 Move byte to word with zero-extension
0F B6 / r MOVZX r32,r/m8 Move byte to doubleword, zero-extension
0F B7 / r MOVZX r32,r/m16 Move word to doubleword, zero-extension
MOVZX EAX, BYTE PTR [MEM]
и
MOVZX EAX, WORD PTR [MEM]
имеют разный код в 32-битном моде.

(11.02.2011 02:17)GhostManSD Wrote: [ -> ]Думаю, MOVZX EAX, BYTE [x] // MOVZX EAX, WORD [x] // MOVZX EAX, DWORD [x].

Смысл последнего? Ab Нет такого
movzx eax, word ptr x

mov eax, word ptr x

Разница, выгода первого?
Выгода первого в том, что компилятор его правильно обработает, так как для второго выдаст ошибку - команды MOV eax, word ptr x не существует.
Понятно, спасибо.
(06.02.2011 03:11)Дьякон Wrote: [ -> ]
(04.02.2011 15:29)MOP Wrote: [ -> ]3. >=293512Ch (21AE12C + 787000). Основная динамическая память.
еще раз. Все секции - статические.
Ещё раз - а я что-то другое написал? Rolleyes
21AE12C + 787000 = 293512C = конец секции .data ВОГа, последней секции экзешника. Здесь кончается определённость и начинается динамический хаос.
Ладно, проехали.
(03.02.2011 10:25)Prayer Wrote: [ -> ]Позарез нужно отключить или убрать из меню вообще кнопку "Показать дополнительные опции", чтоб на серваке ее тоже нельзя было использовать. Нашел дефку кнопки - gspbutt.def, текста на ней в genrltxt.txt.
Лучше для этого спользовать IDA (на IsoHunt можно взять). Там в Shift+F12 найти gspbutt.def, по xrefs перейти на место, где используется. Потом нажми Tab. Там же будут передаваться и координаты, и горячая клавиша, правда коды клавишь в Героях свои. Можно занулить её и сделть запредельными координаты, а лучше полностью перепрыгнуть код по созданию кнопки. Чтобы эти изменения внести, нужно сделать патч для Эры.
Это тоже не совсем правильно называть дин. памятью - это свободная память, в которой как выделяется динамическая память, так и грузятся всякие dll.

(13.09.2010 21:00)Sav Wrote: [ -> ]Прошу прощения за тупой вопрос: динамический адрес может меняться при нескольких запусках программы на одном компьютере или только на разных компьютерах?
Может. На одном компе он часто остается одинаковым от запуска к запуску, но если, например, установить другой антивирус и т.п., легко может поменяться.

(04.02.2011 15:29)MOP Wrote: [ -> ]1. < 401000h. В этих адресах работает система, поддерживая работу запущенного приложения. Также там находится стек. Запись/чтение там просто бесполезны и могут убить приложение.
Система на низком уровне использует адреса >7fffffffh (хотя может использовать только половину, если выставить это в манифесте ехе), системные библиотеки грузятся по адресам ниже 7fffffffh, но близким к этой границе. Адреса от 10000h до 401000h могут использоваться, у меня патч к редактору какое-то время, пока не вырос в размере, грузился по адресу 320000h - в этот адрес его поставил сам загрузчик Винды, я так и выставил. Только что для интереса сделал базовый адрес проги 30000h, где обычно стек - стек получился по адресу A0000h.

Подробнее про память и другие интересные вещи можно почитать у Рихтера: http://rouse.drkb.ru/books/rihter_2008.zip

По Асму вот эта книга должна быть хорошей: http://rouse.drkb.ru/books/marek.zip
GrayFace, спасибо огромное!
GhostManSD Wrote:005CCED7 8B0C95 6CA36800 MOV ECX, DWORD PTR DS:[EDX*4+68A36C]
005CCEDE 51 PUSH ECX
005CCEDF |. 6A 01 PUSH 1
СТАЛО
Код:
005CCED7 3E:8B0C85 6CA36800 MOV ECX, DWORD PTR DS:[EAX*4+68A36C]
005CCEDF |. 6A 01 PUSH 1
Во избежание дальнейших недоразумений...
Если кодишь в Олли, да и не только в ней - не указывай лишних данных. В данном случае надо было убрать "DWORD PTR DS:", но ты указал Олли эту дополнительную ненужную инфу. В результате смысл команды не изменился, но машкод её вырос на 1 байт и затёр "PUSH ECX".
То есть, в затирании ты сам виноват. Внимательнее.
Reference URL's