Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #94, ОКТЯБРЬ 2006 г.

Сношения с Идой

Крис Касперски

Хакер, номер #094, стр. 094-120-4


Количество ошибок сразу же уменьшается чуть ли не в три раза, и они свободно помещаются на экран, что не может не радовать!

Подавляющее большинство ошибок имеют тип «missing operator in expression» (в выражении отсутствует оператор), и чем скорее мы с ними разберемся, тем будет лучше как для нас самих, так и для транслируемой программы.

Переходим к строке 141 и видим:

mov eax, large fs:0

push eax

mov large fs:0, esp

Ну и зачем ассемблерному генератору было вставлять «large»? Все равно MASM его не понимает. Находясь в интегрированном редакторе FAR'а, нажимаем <Ctrl-F7> (replace) и заменяем все «large fs» на просто «fs» (см. рис. 6)

Теперь после трансляции остается совсем немного ошибок, на которые мы продолжим планомерно наступать:

demo_3.asm(70) : error A2015: segment attributes cannot change : Alignment

demo_3.asm(8063) : error A2189: invalid combination with segment alignment : 2048

demo_3.asm(12004) : error A2015: segment attributes cannot change : Alignment

demo_3.asm(13742) : error A2005: symbol redefinition : cchMultiByte

demo_3.asm(14176) : error A2005: symbol redefinition : Filename

demo_3.asm(14200) : error A2005: symbol redefinition : Locale

demo_3.asm(14215) : error A2005: symbol redefinition : CodePage

demo_3.asm(142) : error A2206: missing operator in expression

demo_3.asm(2860) : error A2206: missing operator in expression

demo_3.asm(2888) : error A2206: missing operator in expression

demo_3.asm(2924) : error A2006: undefined symbol : loc_402480

demo_3.asm(3639) : error A2001: immediate operand not allowed

demo_3.asm(4158) : error A2006: undefined symbol : loc_402D11

demo_3.asm(1257) : error A2006: undefined symbol : $NORMAL_STATE$1535

demo_3.asm(1258) : error A2006: undefined symbol : loc_4012AA

demo_3.asm(1259) : error A2006: undefined symbol : loc_4012C5

demo_3.asm(1260) : error A2006: undefined symbol : loc_401311

demo_3.asm(1261) : error A2006: undefined symbol : loc_401348

demo_3.asm(1262) : error A2006: undefined symbol : loc_401350

demo_3.asm(1263) : error A2006: undefined symbol : loc_401385

demo_3.asm(1264) : error A2006: undefined symbol : loc_401418

Беглый взгляд на листинг обнаруживает целый каскад ошибок типа «undefined symbol» (неопределенный символ). Посмотрим, что же у нас не определено на этот раз. Переходим к строке 1257, за которой тянется целый хвост ошибок в строках 1258, 1259, 1260, 1261, 1262, 1263 и 1264. Это настоящее осиное гнездо, обитель зла, которую я собираюсь разбить одним взмахом своего крыла:

1257:off_401956 dd offset $NORMAL_STATE$1535

1258: dd offset loc_4012AA

1259: dd offset loc_4012C5

Назад на стр. 094-120-3  Содержание  Вперед на стр. 094-120-5