Всем привет. Столкнулся с проблемой, что ml.exe для x64 не понимает инструкции assume gs:nothing что в результате выходит Код (Text): test.asm(4) : error A2008: syntax error : gs test.asm(33) : error A2027: operand must be a memory expression line 4: assume gs:nothing line 33: mov rax, gs:58h как быть?
r00tk1d В x64 сегментые регистры используется иначи чем в 32. Сегментый регистр теперь не имеет базу ноль и соответствующий лимит. Поэтому неимеет смысла. Поповоду второй ошибки. Код (Text): mov rax, qword ptr[gs:58h]
Ну, для обращения через gs база сегмента как раз-таки может быть ненулевой. Особой проблемы нет и в том, что не работает директива assume. Используй префикс переопределения сегмента везде, где нужно адресовать переменные относительно базы из gs. В представленной инструкции размерность операнда определяется по разрядности регистра rax. Переопределять размерность нужно только тогда, когда в качестве второго параметра указана переменная другой размерности (чего мы не наблюдаем). Наиболее правильный вариант записи инструкции: Код (Text): mov rax, gs:[58h] ; [gs:58h] для fasm