【问题标题】:assembly -- difference between `.text` and `.section __TEXT` on macOS?程序集——macOS上的`.text`和`.section __TEXT`之间的区别?
【发布时间】:2019-07-07 03:09:40
【问题描述】:

在 macOS 上手动编写汇编代码时,.section .text 会导致“unexpected token in '.section' directive”错误,解决方法是删除.section token。

但是当我通过像clang xxxx.cpp -S 这样的clang 生成汇编代码时,结果是这样的

.section    __TEXT,__text,regular,pure_instructions

这两种方式有什么区别?

【问题讨论】:

  • 只是为了确认一下,您正在使用相同的clang 组装您的手写程序集,对吗? (如果您省略 -c 选项,也可以进行链接)。
  • @PeterCordes 我使用 GAS 来组装我的手写程序集。
  • 这很奇怪。通常.text 只是.section .text 的别名,至少在具有ELF 目标文件的Linux 系统上是这样。也许 MacOS 在其 macho64 目标文件格式中使用了不同的部分名称,并且.text 成为具有某些属性的.section __TEXT 的别名。无论如何,clang 有自己的内置汇编程序,与 GNU binutils gas 分开。它们使用相同的语法和指令,因此它们应该兼容。
  • @PeterCordes 我认为这是与平台相关的,而不是与汇编程序相关的。我使用 GAS、g++ 和 clang 来组装.section .text 的东西,所有这些都变成了“'.section' 指令中的意外标记”;我使用 g++ 和 clang 从 .cpp 文件生成汇编文件,两个文件都包含 .section __TEXT,__text,regular,pure_instructions
  • 是的,这也是我的假设,这对于 MacOS 来说可能是正常的,而不是对于一种工具或另一种工具。 Disable assembler warning ".section __TEXT,__textcoal_nt,coalesced,pure_instructions" 显示了一些正在生成的示例。

标签: macos assembly clang llvm sections


【解决方案1】:

我终于明白了。根据苹果的文档OS X Assembler Reference,指令.text 是部分(__TEXT,__text)

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 2010-10-15
    • 2023-03-07
    • 2016-05-31
    • 1970-01-01
    • 2016-09-17
    • 2014-10-09
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多