Создайте свою программу с помощью отладочных символов, поэтому таблица символов (метаданных) в объектном файле содержит адреса всех ярлыков.
Затем вы можете использовать objdump -t
, чтобы сбросить таблицу символов исполняемого файла или любую другую программу, которая делает то же самое.
Помимо таблицы символов, адреса меток будут находиться в двоичном формате, встроенном в инструкции, например. в режимах абсолютной адресации для режимов адресации, непосредственных операндов или в виде данных (например, .dd label2
). Обычные прыжки используют относительную кодировку, поэтому вы не найдете абсолютный адрес символа в кодировке команд для переходов.
TL: DR: дизассемблирование двоичного кода, чтобы найти абсолютные адреса, возможно, но только для меток, используемых таким образом, поэтому таблица символов является более удобной.
Если вы собираете плоский двоичный файл (например, загрузочный сектор), в формате файла нет символьной таблицы. Таким образом, вы зависите от наличия информации о символе печати FASM для вас, когда вы используете параметр командной строки для этого. Я googled и нашел, что there's a -s
option, чтобы написать файл-информация об отладке файла вывода.
Используйте отладчик или что-то вроде 'objdump', чтобы получить адрес из таблицы символов. Адреса ярлыков не хранятся нигде вне таблицы символов, если вы их не используете (например, как цель перехода, адрес загрузки/хранения, непосредственный операнд или как данные (например, '.dd label2'). –
Хорошо. Обратите внимание, что было бы более точно сказать, что между «label1» и «label2» имеется 5 байтов данных, метки не имеют связанного с ними размера (если вы не используете используя MASM или TASM, где db/dw/dd после ярлыка магически подразумевает размер операнда для инструкций, которые используют эту метку в операнде памяти). –
В любом случае, просто чтобы уточнить, вы не хотите получать адрес в регистр или в память внутри программы, правильно? Вы хотите, чтобы она была напечатана на вашем экране каким-то образом отдельно от запуска вашей программы? –