【问题标题】:Understanding callq instruction in assembly了解汇编中的 callq 指令
【发布时间】:2020-05-08 13:40:43
【问题描述】:

我是汇编语言的新手。在分析核心转储文件期间,我想了解汇编级别的函数调用。

google 后发现 callq 是调用函数的指令。

  Syntax:
      callq "function Name"

但是,在核心文件中,语法是不同的。

          10cd52f:   ff 90 10 02 00 00       callq  *0x210(%rax) 

请告诉我这是什么意思?

【问题讨论】:

    标签: assembly gdb x86-64 coredump


    【解决方案1】:

    这是一个间接调用指令:它从0x210(%rax) 加载内存的一个qword,并在该单词中找到的地址调用函数。您可以看出这是来自操作数前面的* 的间接调用。有关详细信息,请参阅指令集参考和 GNU 汇编器手册。

    正常的相对调用具有您上面描述的语法:

    call function
    

    注意q后缀可以省略。

    【讨论】:

    • 感谢您的回复。我已经阅读了本手册ece.ualberta.ca/~cmpe490/documents/axiom/GNU_Assembler.pdf 找不到所需的信息。请让我知道具体参考哪个部分。我被一个核心转储分析困住了。这对我理解和解码这条指令很重要。
    • @user3691131 这是来自真实 GNU 手册的 relevant section。请注意,它也表示“绝对”调用,这有点用词不当,因为所有标有* 的绝对调用实际上都是间接调用,而正常的远绝对调用lcall $segment, $offset 没有这样标记。
    猜你喜欢
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多