2014-11-27 3 views
1

Я читаю код сборки, пытаясь понять, что он делает (это вызов, поэтому ничего злонамеренного). На одной строке имеется следующая инструкция:Сборка инструкции cmp, которая имеет 3 аргумента

ЧМК d, [EAX], 0DADADADA

Я потратил возрасты на Google и не могу понять это, я знаю, что вы не можете сравнить 3 значения так Я знаю 0DA .... часть - это то, что мне не хватает. Я нашел статью, которую я не могу найти снова, предполагая, что это связано с заполнением пустой памяти, но не уверен, любая помощь будет оценена по достоинству.

+0

Это довольно подозрительно. 'cmp' имеет ровно 2 входных операнда, и он неявно устанавливает флаги состояния как единственный выход. Плюс, что '0DADADADA' тоже выглядит плохо: нулевой столбец должен идентифицировать его как восьмеричное число, а цифры, очевидно, шестнадцатеричные. – EOF

+0

Ведущий ноль идентифицирует его как число; независимо от того, является ли оно восьмеричным или нет, это вопрос определения ассемблера, и это, очевидно, шестнадцатеричная константа. –

+0

@IraBaxter: Ну, обычно шестнадцатеричные литералы имеют префикс «0x ...», а восьмеричные - ноль. Этот вопрос * может * относиться к ассемблеру, который использует разные соглашения, но точный ассемблер не упоминается. – EOF

ответ

0

Вы должны указать синтаксис ассемблера, который вы используете; для x86 существует довольно много разновидностей (что, вероятно, так), и даже для других.

Не зная конкретного синтаксиса и соглашаясь с тем, что инструкции CMP не имеют 3 операндов, я предполагаю, что «d» означает «dword [32 бит]». Поэтому я думаю, что вероятная интерпретация

"compare dword operand indirect through eax to hex literal 0DADADADA" 

Это действительная инструкция x86.

+2

Возможно, где-то еще есть макрос, определяющий 'd' как' DWORD'? –

+0

Боюсь, я не могу ответить на все это, потому что я просто не знаю. Нам просто предоставили фрагмент кода (10 строк), и мы просто попытаемся выяснить, что делает эта часть. Ничто в коде не определяет, что такое 'd'. – user118074

+2

Предоставлено кем? Одно дело - попросить вас понять, где что-то четко определено, и вы изучаете детали такого определения. Совершенно другое дело, чтобы кто-то передал вам что-то, не делая четких определений. Я полагаю, что агент спрашивает профессора? Либо он учит вас уроку в реальном мире (когда вы не получаете достаточной информации, это ваша * проблема, чтобы получить достаточно), или он очень плохой учитель. Если нет, он невежественный босс, добро пожаловать в реальный мир. Я бы попросил его указать, какая именно ассемблерная нотация. –