首页 > 编程语言 >golang中汇编语义

golang中汇编语义

时间:2023-12-27 14:22:05浏览次数:33  
标签:汇编 SP 语义 golang CX 寄存器 go SB main

bito> TEXT main.main(SB) D:/main.go
main.go:12 0xea7580 493b6610 CMPQ 0x10(R14), SP
main.go:12 0xea7584 0f8691000000 JBE 0xea761b
main.go:12 0xea758a 4883ec50 SUBQ $0x50, SP
main.go:12 0xea758e 48896c2448 MOVQ BP, 0x48(SP)
main.go:12 0xea7593 488d6c2448 LEAQ 0x48(SP), BP
main.go:14 0xea7598 488d05c1db2d00 LEAQ go.func.+16381(SB), AX
main.go:14 0xea759f 90 NOPL
main.go:14 0xea75a0 e89bd759ff CALL runtime.newproc(SB)
main.go:16 0xea75a5 488d05348a0800 LEAQ runtime.rodata+557024(SB), AX
main.go:16 0xea75ac bb01000000 MOVL $0x1, BX
main.go:16 0xea75b1 e84ae255ff CALL runtime.makechan(SB)
main.go:16 0xea75b6 4889442420 MOVQ AX, 0x20(SP)
main.go:17 0xea75bb 440f117c2428 MOVUPS X15, 0x28(SP)
main.go:17 0xea75c1 440f117c2438 MOVUPS X15, 0x38(SP)
main.go:17 0xea75c7 488d0d42c34000 LEAQ go.itab.syscall.Signal,os.Signal(SB), CX
main.go:17 0xea75ce 48894c2428 MOVQ CX, 0x28(SP)
main.go:17 0xea75d3 488d15060b4000 LEAQ $f64.fff0000000000000+256(SB), DX
main.go:17 0xea75da 4889542430 MOVQ DX, 0x30(SP)
main.go:17 0xea75df 48894c2438 MOVQ CX, 0x38(SP)
main.go:17 0xea75e4 488d0dfd0a4000 LEAQ $f64.fff0000000000000+264(SB), CX
main.go:17 0xea75eb 48894c2440 MOVQ CX, 0x40(SP)
main.go:17 0xea75f0 488d5c2428 LEAQ 0x28(SP), BX
main.go:17 0xea75f5 b902000000 MOVL $0x2, CX
main.go:17 0xea75fa 4889cf MOVQ CX, DI
main.go:17 0xea75fd 0f1f00 NOPL 0(AX)
main.go:17 0xea7600 e8bb7f61ff CALL os/signal.Notify(SB)
main.go:18 0xea7605 488b442420 MOVQ 0x20(SP), AX
main.go:18 0xea760a 31db XORL BX, BX
main.go:18 0xea760c e80ff155ff CALL runtime.chanrecv1(SB)
main.go:19 0xea7611 488b6c2448 MOVQ 0x48(SP), BP
main.go:19 0xea7616 4883c450 ADDQ $0x50, SP
main.go:19 0xea761a c3 RET
main.go:12 0xea761b 0f1f440000 NOPL 0(AX)(AX
1)
main.go:12 0xea7620 e83be35bff CALL runtime.morestack_noctxt.abi0(SB)
main.go:12 0xea7625 e956ffffff JMP main.main(SB)
解释上面这段汇编代码

这段汇编代码是Golang程序的一部分,它展示了程序中的一些指令和操作。每一行代码都包含了指令的地址、指令本身以及注释。以下是对每一行代码的解释:

  1. CMPQ 0x10(R14), SP:比较R14寄存器偏移量为0x10的内存地址中的值和SP寄存器中的值。

  2. JBE 0xea761b:如果上一条指令的结果小于或等于0,则跳转到0xea761b的地址。

  3. SUBQ $0x50, SP:将SP寄存器的值减去0x50。

  4. MOVQ BP, 0x48(SP):将BP寄存器中的值复制到偏移量为0x48的SP寄存器中。

  5. LEAQ 0x48(SP), BP:将偏移量为0x48的SP寄存器中的地址复制到BP寄存器中。

  6. LEAQ go.func.*+16381(SB), AX:将偏移量为16381的go.func.*标签的地址复制到AX寄存器中。

  7. CALL runtime.newproc(SB):调用runtime.newproc函数。

  8. LEAQ runtime.rodata+557024(SB), AX:将偏移量为557024的runtime.rodata标签的地址复制到AX寄存器中。

  9. MOVL $0x1, BX:将1复制到BX寄存器中。

  10. CALL runtime.makechan(SB):调用runtime.makechan函数。

  11. MOVQ AX, 0x20(SP):将AX寄存器中的值复制到偏移量为0x20的SP寄存器中。

  12. MOVUPS X15, 0x28(SP):将X15寄存器中的值复制到偏移量为0x28的SP寄存器中。

  13. MOVUPS X15, 0x38(SP):将X15寄存器中的值复制到偏移量为0x38的SP寄存器中。

  14. LEAQ go.itab.syscall.Signal,os.Signal(SB), CX:将go.itab.syscall.Signal,os.Signal标签的地址复制到CX寄存器中。

  15. MOVQ CX, 0x28(SP):将CX寄存器中的值复制到偏移量为0x28的SP寄存器中。

  16. LEAQ $f64.fff0000000000000+256(SB), DX:将偏移量为256的f64.fff0000000000000标签的地址复制到DX寄存器中。

  17. MOVQ DX, 0x30(SP):将DX寄存器中的值复制到偏移量为0x30的SP寄存器中。

  18. MOVQ CX, 0x38(SP):将CX寄存器中的值复制到偏移量为0x38的SP寄存器中。

  19. LEAQ $f64.fff0000000000000+264(SB), CX:将偏移量为264的f64.fff0000000000000标签的地址复制到CX寄存器中。

  20. MOVQ CX, 0x40(SP):将CX寄存器中的值复制到偏移量为0x40的SP寄存器中。

  21. LEAQ 0x28(SP), BX:将偏移量为0x28的SP寄存器中的地址复制到BX寄存器中。

  22. MOVL $0x2, CX:将2复制到CX寄存器中。

  23. MOVQ CX, DI:将CX寄存器中的值复制到DI寄存器中。

  24. CALL os/signal.Notify(SB):调用os/signal.Notify函数。

  25. MOVQ 0x20(SP), AX:将偏移量为0x20的SP寄存器中的值复制到AX寄存器中。

  26. XORL BX, BX:将BX寄存器中的值与0进行异或操作。

  27. CALL runtime.chanrecv1(SB):调用runtime.chanrecv1函数。

  28. MOVQ 0x48(SP), BP:将偏移量为0x48的SP寄存器中的值复制到BP寄存器中。

  29. ADDQ $0x50, SP:将SP寄存器的值加上0x50。

  30. RET:返回到调用此函数的地址。

  31. NOPL 0(AX)(AX*1):空操作。

  32. CALL runtime.morestack_noctxt.abi0(SB):调用runtime.morestack_noctxt.abi0函数。

  33. JMP main.main(SB):跳转到main.main函数的地址。

标签:汇编,SP,语义,golang,CX,寄存器,go,SB,main
From: https://www.cnblogs.com/Asuphy/p/17930453.html

相关文章

  • go-carbon v2.3.0 圣诞特别版发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
    go-carbonv2.3.0圣诞节特别版发布,这应该是2023年的最后一个版本,祝大家圣诞节快乐!carbon是一个轻量级、语义化、对开发者友好的golang时间处理库,支持链式调用。目前已被awesome-go收录,如果您觉得不错,请给个star吧github.com/golang-module/carbongitee.com/golang-m......
  • golang 项目开发如何创建 Module
    golang项目开发如何创建Module原创 demo007x 知识派 2023-12-2208:30 发表于北京 听全文golang项目开发如何创建Moduleimg为什么要创建一个 Module?我们日常开发程序的时候都会引入第三方的 package,使用第三方的package的好处是我们可以快速的开发我们的......
  • 语义分割与图像合成的结合:创新应用场景
    1.背景介绍语义分割和图像合成是计算机视觉领域中的两个重要技术,它们各自具有独特的应用场景和优势。语义分割是将图像中的不同物体或区域分类并标注其类别的过程,主要应用于目标检测、自动驾驶等领域。图像合成则是通过计算机生成新的图像,以模拟现实世界或创造虚拟世界的场景。在这......
  • 2023最新中级难度汇编语言面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度汇编语言面试题合集问:解释一下宏汇编语言(MacroAssemblyLanguage)是什么?请举例说明如何使用宏汇编语言进行代码开发。宏汇编语言(MacroAssemblyLanguage,MASM)是一种扩展了基本汇编语言功能的编程工具。它允许程序员定义和使用......
  • 2023最新高级难度汇编语言面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度汇编语言面试题合集问:在汇编语言中,什么是宏指令(MacroInstruction)?请解释一下宏指令的概念和使用方式。在汇编语言中,宏指令(MacroInstruction)是一种用于简化代码编写和维护的预处理工具。宏定义允许程序员将一个或多个复杂的指......
  • Golang协程池ants
    官方示例packagemainimport( "fmt" "github.com/panjf2000/ants/v2" "sync" "sync/atomic" "time")varsumint32funcmyFunc(iinterface{}){ n:=i.(int32) atomic.AddInt32(&sum,n) fmt.Printf(&q......
  • NLP复习之向量语义
    向量语义词汇语义语义概念(senseorconcept)是单词含义(wordsense)的组成部分,词原型可以是多义的。同义词是指:在某些或者全部的上下文中,单词之间有相同或近似含义可能没有完全相同含义的同义词例子!即使在很多情况下(上下文语境),单词间的含义是相同的。但仍然有可能......
  • 汇编-ASCII十六进制数和非压缩十六进制数
     非压缩十进制整数的高4位总是为零,而ASCII十进制数的高4位则等于0011b。在任何情况下,这两种类型的整数的每个数字都占用一个字节。下面的例子展示了3402在两种格式下是如何存放的: 尽管ASCII算术运算执行得比二进制算术运算要慢,但是它有两个明显的优点:●无须在执行算术运......
  • 自然语言处理的未来:语义理解与知识图谱
    1.背景介绍自然语言处理(NLP)是人工智能领域的一个重要分支,其主要研究如何让计算机理解和生成人类语言。随着大数据、深度学习等技术的发展,NLP领域取得了显著的进展。然而,目前的NLP技术仍然存在一些局限性,如无法理解语境、无法处理多义性等。因此,语义理解和知识图谱等技术成为了未......
  • Golang压测ws
    packagemainimport( "fmt" "log" "sync" "time" "github.com/gorilla/websocket")funcmain(){ //设置要压测的WebSocket服务地址 url:="ws://192.168.252.128:8080/" //设置并发请求数量 concurrency:=1......