当前位置: 首页 > 知识库问答 >
问题:

mac OS组装中的逐步hello world

仲和韵
2023-03-14

我一直在为mac os(x86\u 64体系结构)的汇编而苦苦挣扎。我想向您介绍一个hello world程序的解释,如果您能给我一些建议和解释,我将不胜感激:说了这些,让我们跳进代码。

global _main 
section .text

_main:
   mov rax, 0x2000004
   mov rdi, 1
   mov rsi, str
   mov rdi str.len
   syscall

   mov rax, 0x2000001
   xor rdi, rdi 
   syscall

section .data
str: “Hello world”, 
.len: equ $ - str

所以让我让自己难堪:

>

节。text告诉操作系统(我猜)这是实际程序的开始。

_如果我没有错的话,main是一个函数,这似乎是函数的符号

mov rax,0x2000004:我不明白这东西是做什么的。我在网上查了系统调用是如何工作的,它基本上需要一个文件代码(我认为这是下一行的1),一个指向缓冲区的指针(这个缓冲区到底在哪里,我认为指向我的字符串的第一个字节)和一段文本的字节长度(在这种情况下是. len)。我的问题是我什么时候需要写东西,这个十六进制业务是如何工作的,mov rax指令的实际工作是什么。

mov rdi,1:我还是不知道到底发生了什么。我们需要一个1来设置输出到stdout,但是这个指令的实际功能是什么,这个1要去哪里,幕后发生了什么。

然后我们有这个我不太理解的str.len,这个. len符号是什么?我知道这给出了字符串的大小,但是我们怎么能这样写呢?

syscall:这个函数看起来像是黑魔法,我知道操作系统正在做一些肮脏的把戏,但我对操作系统非常无知,所以我不知道这个东西在做什么。

mov rax,0x2000001:现在我们需要退出程序,为什么我们需要将这个十六进制数加载到寄存器中(是的,我知道这是退出的命令,但同样,实际发生了什么)。

xor rdi, rdi:这可能是我得到的唯一位,我们通过异构相同的两个值将rdi寄存器的内容设置为0。

这是黑魔法

str:“你好,世界”:我明白了:)

伦:我不明白这一点。符号我想$的意思是“这里的地址”,或者至少这是我查到的,我认为它是正确的。

共有1个答案

唐涛
2023-03-14
  1. 不,这只是导出符号

至于(12),是的,$是当前位置,也就是字符串的结尾。所以减去字符串的开头会给你长度。前导点只是一个特殊的标签,它指示汇编器用最近的前一个非本地标签作为前缀,在这种情况下是str。所以这相当于编写str.len

 类似资料:
  • 问题内容: 我很难让Joda Time安装和工作。 周围的大多数说明都假定您具有一定的知识。 有人可以假设我一无所知,然后逐步指导我将Joda Time zip文件放到哪里,我是否将其解压缩?如何使用eclipse正确添加它,以及如何将其导入到类文件中。 非常感谢!:) 问题答案: 在Eclipse中创建Java项目 下载最新的文件,然后提取其内容 在Eclipse中,在中找到您的项目,然后右键单

  • 问题内容: 我只是将eclipse放在笔记本电脑上,当我使用Step Into调试工具时,它不仅使我进入了代码的下一部分。一个例子是,如果我调用数组列表,它将带我进入数组列表类,并通过所有必需的代码进入 但是,在我的桌面上,它只会带我进入下一段代码。我做: 如果我单击该按钮(从我的桌面进入),则 hello world 将出现在控制台中。 相比之下,如果我在笔记本电脑上“步入” ,它将首先拉起Pr

  • 遵循下面的引导,在 macOS 上构建 Electron. Build Instructions (macOS) Follow the guidelines below for building Electron on macOS. 基本要求 macOS >= 10.11.6 Xcode >= 9.0.0 node.js (外部) 包含TLS 1.2支持的Python2.7 Prerequisit

  • 请按照下面的指南在macOS下构建 Electron 本身,以此创建自定义 Electron 二进制文件。 为了将您的应用代码与预构建的 Electron 二进制文件打包并发布,请参阅 应用程序发布 指南。 Prerequisites macOS >= 10.11.6 Xcode >= 9.0.0 node.js (外部) 包含TLS 1.2支持的Python2.7 Python Please a

  • 我能做什么来解决这个问题?我要尽快处理这件事。 谢谢

  • 主要内容:使用 Homebrew 安装,手动下载安装,镜像加速使用 Homebrew 安装 macOS 我们可以使用 Homebrew 来安装 Docker。 Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装: 在载入 Docker app 后,点击 Next,可能会询问你的 macOS 登陆密码,你输入即可。之后会弹出一个 Docker 运行的提示窗口,状态栏上也有有个小鲸