Использование PTR при назначении метки x86

Итак, я разобрал небольшую программу на С ++ (узнал намного больше о сборке с тех пор, как начал это делать), и одна из первых вещей, которую сборка выполняет в верхней части основной процедуры:

var_E4= byte ptr -0E4h

Я знаю, что ptr используется для объявления размера данных, которые ассемблер не может неявно узнать, но после долгих осмотров я не нашел ни примера, ни объяснения этой конкретной установки. Байт ptr говорит ассемблеру присваивать -228 для var_E4 (по сути, говорит, что он должен обрабатывать его как шестнадцатеричное значение со знаком)? Если нет, что происходит?

1 ответ

Решение

Это просто определение макроса, которое позволяет писать [rsp + var_E4] вместо [rsp - 0E4h], чтобы улучшить читаемость выходных данных дизассемблирования для инструкций, обращающихся к локальным переменным в стеке.

Вы не сказали нам, какой именно дизассемблер вы использовали, или не указали какой-либо контекст (например, строки, использующие этот макрос). Я думаю, что, вероятно, не так много, чтобы сказать, хотя. Пишем так, вместо подстановки значения везде, где используется макрос, нулевой эффект на двоичный машинный код, который вы получите от сборки.

Другие вопросы по тегам