В программе объявляю константу: Code (Text): P_1_V10__VAR_IMAGEBASE equ offset project_1_v10__shell2___imagebase - offset project_1_v10__shell2 которая содержит количество байт от начала кода до переменной. В коде пытаюсь обратится к переменной таким образом: Code (Text): cmp esi, dword ptr [ebp + P_1_V10__VAR_IMAGEBASE] В регистре ebp - адрес начала кода. В результате при компиляции получаю ошибку A2155: cannot use 16-bit register with a 32-bit address. Не могу понять в чем причина такой ошибки и как в таком случае будет правильнее обратится к переменной.
тут разницы никакой же. вот я бы посоветовал так: Code (Text): mov eax, ebp add eax, P_1_V10__VAR_IMAGEBASE cmp esi, [eax] просто мне самому непонятна суть сообщения ассемблера в данном случае. возможно дело в том, что постоянное смещение не может занимать больше одного байта, а тут оно очевидно больше.
Константа должна быть в скобках. Примерно так. Code (Text): P_1_V10__VAR_IMAGEBASE equ (offset project_1_v10__shell2___imagebase - offset project_1_v10__shell2)
оу... я смотрю вы выучили асм по книге "Учимся программировать драйверы на языке ассемблер на примере руткитов уровня ядра For Dummies")))
Все оказалось проще, вместо: Code (Text): cmp esi, dword ptr [ebp + P_1_V10__VAR_IMAGEBASE] написал так: Code (Text): cmp esi, dword ptr [P_1_V10__VAR_IMAGEBASE + ebp] s_d_f, спасибо за помощь, при использовании скобок всё нормально начало компилиться в первом варианте записи ...а мне так привычней )