Оригинальный вопрос: что это за язык? Это синтаксический язык AT & T для x86-64. https://stackoverflow.com/tags/x86/info для руководств от Intel и других ресурсов и https://stackoverflow.com/tags/att/info для того, как синтаксис AT & T отличается от синтаксиса Intel, используемого в большинстве руководств. (Я думаю, что вики-тег x86 имеет несколько учебных пособий по синтаксису AT & T.) Большинство дизассемблеров AT & T также имеют режим intel-syntax, поэтому вы можете использовать его, если хотите, чтобы asm соответствовал руководствам Intel.
Какой смысл?
Дело в том, что вы можете отлаживать свою программу, если знаете asm. Или вы можете показать asm тому, кто его понимает, или включить его в отчет об ошибке.
Вы компилировали без отладочных символов? Или произошел сбой в коде библиотеки без символов? Отладчики могут показывать вам asm, если не могут показать исходный код или если вы спрашиваете asm.
Если у вас есть символы отладки для вашего собственного кода, вы можете по крайней мере вернуться к родительским функциям, для которых у вас есть источник. (Если только стек не поврежден.)
Ошибка вашей программы в этой инструкции выделена розовым цветом? Это немного странно, так как он загружается из статических данных (относительная загрузка RIP означает, что адрес является постоянной времени соединения).
Возможно, вы munmap
или mprotect
на этой странице данных или текстового сегмента вашей программы, так что загрузка может дать сбой? Обычно ошибки возникают только тогда, когда в режиме адресации используется указатель.
(Тем не менее, call *0x1234(%rip)
прямо перед вызовом через указатель функции. Указатель функции сохраняется в памяти, но выборка кода после выполнения call
приведет к сбою, если он указывает на неотображенный или не -исполняемая страница). Но ваше первое изображение показывает, что вы получили SIGABRT, а не SIGSEGV, так что это больше похоже на то, что программа нарочно прервана после неудачного подтверждения.
Я считаю, что большинство быстрых кодеров не знают asm
Нет ничего более полезного для отладчика без символов отладки и исходных файлов.
Также имейте в виду, что большинство авторов отладчиков знают asm, поэтому для них это очевидно полезная функция / поведение. Они знают, что многие люди не смогут извлечь из этого пользу, но некоторые из них получат.
Asm - это то, что действительно работает на машине. Без asm вы не смогли бы найти ошибки компилятора с неправильным кодом и т. Д. И т. Д. Что касается программных ошибок, то нет более низкого уровня, чем asm, так что это не произвольный выбор какого-то более низкого уровня, на котором стоит остановиться.
(Если в вашем дизассемблере или отладчике также есть ошибка, в этом случае вам необходимо проверить шестнадцатеричный машинный код.)