Использование PTR при назначении метки x86
Итак, я разобрал небольшую программу на С ++ (узнал намного больше о сборке с тех пор, как начал это делать), и одна из первых вещей, которую сборка выполняет в верхней части основной процедуры:
var_E4= byte ptr -0E4h
Я знаю, что ptr используется для объявления размера данных, которые ассемблер не может неявно узнать, но после долгих осмотров я не нашел ни примера, ни объяснения этой конкретной установки. Байт ptr говорит ассемблеру присваивать -228 для var_E4 (по сути, говорит, что он должен обрабатывать его как шестнадцатеричное значение со знаком)? Если нет, что происходит?
1 ответ
Это просто определение макроса, которое позволяет писать [rsp + var_E4]
вместо [rsp - 0E4h]
, чтобы улучшить читаемость выходных данных дизассемблирования для инструкций, обращающихся к локальным переменным в стеке.
Вы не сказали нам, какой именно дизассемблер вы использовали, или не указали какой-либо контекст (например, строки, использующие этот макрос). Я думаю, что, вероятно, не так много, чтобы сказать, хотя. Пишем так, вместо подстановки значения везде, где используется макрос, нулевой эффект на двоичный машинный код, который вы получите от сборки.