我正在阅读程序包中的源代码syscall
,遇到了一些问题:
由于我完全是syscall
and 的菜鸟assembly
,所以请毫不犹豫地分享您所知道的任何信息:)
首先关于func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
:其参数trap, a1, a2, a3
和返回值r1 r2
意味着什么?我已经搜索了文档和站点,但似乎对此缺乏描述。
其次,由于我正在使用,所以我darwin/amd64
搜索了源代码并在此处找到它:http
:
//golang.org/src/pkg/syscall/asm_darwin_amd64.s?h=RawSyscall
似乎它是由assemble编写的(我听不懂),您能解释一下61-80行中发生了什么ok1:
吗,76行下的part 的含义是什么?
我还在http://golang.org/src/pkg/syscall/zsyscall_darwin_amd64.go中找到了一些代码zsyscall
,它的文件名是什么意思?
syscall
&和有rawsyscall
什么区别?
如果我想编写自己的syscall函数,如何以及何时使用它们(是的,os包提供了很多选择,但是仍然有一些情况没有涵盖)?
如此众多的菜鸟问题,感谢您耐心阅读和回答:)
我将与您分享我精简的装配知识:
61 TEXT ·RawSyscall(SB),7,$0
62 MOVQ 16(SP), DI
63 MOVQ 24(SP), SI
64 MOVQ 32(SP), DX
65 MOVQ $0, R10
66 MOVQ $0, R8
67 MOVQ $0, R9
68 MOVQ 8(SP), AX // syscall entry
69 ADDQ $0x2000000, AX
70 SYSCALL
71 JCC ok1
72 MOVQ $-1, 40(SP) // r1
73 MOVQ $0, 48(SP) // r2
74 MOVQ AX, 56(SP) // errno
75 RET
76 ok1:
77 MOVQ AX, 40(SP) // r1
78 MOVQ DX, 48(SP) // r2
79 MOVQ $0, 56(SP) // errno
80 RET
81
ok1
ok1
。您在左侧每一行上看到的简称被称为mnemonics
,代表汇编说明:
MOVQ
表示移动四字(64位数据)。ADDQ
是“添加四字”。SYSCALL
很明显JCC
如果条件(条件标志由上一条指令设置),则为“跳转”RET
回来了在助记符的右侧,您会发现每条指令的参数,它们基本上是常量和寄存器。
SP
是堆栈指针AX
是累加器BX
是基址寄存器每个寄存器可以保存一定数量的数据。我相信在64位CPU架构上,每个寄存器实际上是64位。
Syscall
和之间的唯一区别RawSyscall
是在第14、28和34行上,在哪里Syscall
调用runtime·entersyscall(SB)
,runtime·exitsyscall(SB)
而RawSyscall
不会。我假设这意味着Syscall
通知运行时它已切换为阻塞的系统调用操作,并且可能使CPU时间流向另一个goroutine
/线程,而RawSyscall
只是阻塞了。
在当前版本中,您不仅可以查看AssetBundle文件的包含资源信息和依赖关系信息,同时还可以查看每种资源的详细使用信息。目前,UWA资源检测服务对于主流资源的支持如下: 纹理资源 对于纹理资源,UWA可以提供以下重要信息:分辨率、资源格式、内存占用、Mipmap功能是否开启 和 Read/Write是否开启。这些均为影响纹理文件尺寸和内存占用的重要因素。因此,我们将其在此进行详细展示,您可以对每
在概览页面或警报历史记录页面中点击警报以查看其详细信息页面。在“警报详细信息”页面中,你可以查看引发警报的详细信息,将它标记为已读或未读,开启或关闭它,将它分配给成员,添加备注。当你打开此页面时,警报会自动标记为“已读”。 警报详情页面的信息 摘要 它显示警报的当前状态,以及其引发时间和结束时间。 警报详细信息 会显示警报名、警报的解释,以及 Navicat Monitor 的建议以帮助你调查和解
问题内容: 我如何验证信用卡。我需要做检查。黑莓中有API可以做到吗? 问题答案: 您可以使用以下方法来验证信用卡号
问题内容: 我认为这是作为JasperReports的中心主题而被很好地记录下来的东西,但是我在任何地方都找不到答案。 细节区域的目的/功能/意图是 什么?它应该只是报告的中心部分还是核心部分? 从另一个问题出发,我曾指出,细节范围与JRDatasource提供的记录/ bean之间存在1:1的关系。这个启示揭示了一些切线问题: 可以使用Java以编程方式添加明细区域;如果您(以编程方式)指定了更
我下面有下面的代码。有一个解决方法,我调用每一个CmProblem RDD。我在solve方法中传入了一个图,它实际上编辑了该图。 每个任务会收到一个单独的图形实例吗? 如果不是,我如何为所有求解方法的执行实现单独的图形副本?我知道我可以使用Gson传递图的序列化版本,并在solve方法中将其反序列化。但是还有别的办法吗?
接口说明 获取角色详细信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /permissions/api/team/role/v1.0.0/info 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN roleId string query 是