Я нахожусь в сеансе GDB для анализа посмертного сбоя. Я смотрю на вывод дизассемблирования для функции, и я вижу это:
=> 0x00007f8d354aed52 <+50>: callq *(%rax)
=>
указывает, что это была инструкция, вызванная во время сбоя. Таким образом, я получил ошибку сегмента, вызывающую функцию на *(%rax)
. Я довольно новичок в сборке. Я вижу, что паренсы вокруг регистра означают, что нужно почтить (получить значение) этот адрес. Таким образом, (%rax)
означает получить значение указателя, которое в данный момент хранится в %rax
. Что делает украшение звезды на этом? Означает ли это дальнейшее разыменование этого значения (таким образом, (%rax)
само по себе является указателем)? У меня проблемы с поиском *(
синтаксиса ассемблера.
Это сборка x64, сгенерированная из GCC 4.8, компилирующего код C ++.