gpt4 book ai didi

assembly - 汇编中标签和函数有什么区别

转载 作者:行者123 更新时间:2023-12-02 20:04:56 26 4
gpt4 key购买 nike

一直在通过 AT&T 语法关注 youtube 上的汇编教程。我刚刚了解了如何使用 .type 指令声明(如果这是正确的术语)函数,例如:

.type MyFunction, @function

现在我可以定义我的函数,如下所示:

MyFunction:
<code here>

随后在以下时间调用它:

call MyFunction

我知道在教程之前,我们只是创建一个附加到某些代码的标签:

MyLabel:
<code here>

可以这样调用:

call MyLabel

所以我的问题是:

用 .type 声明的函数与仅用标签声明的“函数”之间到底有什么区别?什么时候应该使用其中一种而不是另一种,或者这很重要吗?

最佳答案

这就是binutils文档中关于 .type 指令的说明(假设您使用的是 GNU 汇编器):

This directive is used to set the type of a symbol.

...

For ELF targets, the .type directive is used like this:

.type name , type description

根据 Symbol Type 上的文档:

The type attribute of a symbol contains relocation (section) information, any flag settings indicating that a symbol is external, and (optionally), other information for linkers and debuggers. The exact format depends on the object-code output format in use.

.type MyFunction, @function 将标签 MyFunction (这是一个符号)标记为链接器或调试器的函数。

当手工编写纯汇编文件时,这是不必要的。这是 file 的示例其中调用了 itoa 函数。正如您所看到的,标签前面没有指令。

总而言之,标签可以标记为函数,但对于执行代码来说,它只是一个跳转目标。

关于assembly - 汇编中标签和函数有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31405464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com