首页 > TAG信息列表 > movq

【双剑合璧】go channel源码剖析,goroutine数据通信,数据结构:环形队列+双向链表,channel设计思想,两个协程之间传数据,配合select使用,关闭channel,有无缓冲区,缓

go Channel 简介 channel是用于goroutine的数据通信,在Go中通过goroutine+channel的方式,可以简单、高效地解决并发问题。 channel设计思想 Go语言的并发模型基于CSP(Communicating Sequential Processes)理论。Go的并发哲学强调: “Do not communicate by sharing memory; instead, s

C++虚函数调用简单分析

C++代码如下: class parent_parent { public: virtual int print() const { return 1; } }; class sub : public parent_parent { public: int print() const override { return 0; } }; int main() { parent_parent* p = new sub;

图解CPU执行一段程序

程序执行 从打印出 Hello World 开始,程序如何运行起来,大家都很清楚。那么底层如何执行的呢,让我们一探究竟。 long main(){ long a = 1; long b = 2; return a + b; } 来一段 C 语言作为例子, gcc -S 生成汇编代码,简化如下。 pushq %rbp movq %rsp, %rbp movq $1, -8

go x,y=y,x交换原理

package main import ( "fmt" ) func main() { x := 1 y := 2 x, y = y, x fmt.Printf("x:%d,y:%d\n", x, y) }   0x0026 00038 (.\Hello.go:8) MOVQ $1, "".x+48(SP) //1赋值给x 0x002f 00047 (.\Hello.go:9) MOV

汇编看指针

前言 开发中经常使用指针访问变量修改变量值, 那么编译器是怎么翻译指针的 或者说指针在汇编层面到底是什么 mov 和 lea 指令 指针的分析离不开这两个指令,简单看下mov指令 mov指令 GNU汇编器输出AT&T汇编时为 mov 指令添加了一个维度,在其中必须声明要传送的数据元素的长度 因

go语言编译

main.go文件 package main import "fmt" func main() { x,y:=1,2 x,y=y+1,x+2 fmt.Println(x,y) } 编译: 方法一: go tool compile 使用go tool compile -N -l -S main.go生成汇编代码: 会生成main.o 方法二: go build -gcflags -S 使用go build -gcflags -S main.go也可以

在C语言中实现协程库(一)----------协程切换原理详解

从这篇文章开始,我将一点一点详细介绍如何在c语言中实现协程库.并对其中涉及到的技术进行详细的解释. 感兴趣的小伙伴欢迎一起参与 代码地址 协程切换原理 使用glibc中<ucontext.h>提供的相关函数 用户态切换简单来说就是保存当前上下文,切换到新的上下文. 用户态程序的上下

【汇编语言与计算机系统结构笔记09】程序栈,(x86-32)过程调用,栈帧,寄存器使用惯例

本次笔记内容: 10.栈与过程调用的机器表示-1 11.栈与过程调用的机器表示-2 12.实验 文章目录 前言 x86-32的程序栈 压栈操作 出栈操作 过程调用 基于栈的编程语言 栈帧 x86-32/Linux下的栈帧 以swap过程为例 寄存器使用惯例 为什么设置“使用惯例” x86-32/Linux下的使用惯例

Understanding Swift’s value type thread safety - 代码分析(一)

结构体并不代表线程安全,swift在此上未做保证 func testScenarioA() throws { var store: Int = 0 DispatchQueue.concurrentPerform(iterations: 1_000_000) { i in store = i _ = store } }   执行后下断点,对比

golang 反汇编的命令

main.go内容如下: package main import ( "fmt" ) func main() { fmt.Println("zzzzzzzzzzz") } 可以使用以下的命令反汇编出来plan 9汇编指令的内容: #以下两种命令都可以 go tool compile -S main.go go build -gcflags -S main.go windows平台与linux平台反汇编出来的汇

CVE-2021-3156:Sudo 堆缓冲区溢出漏洞 POC

漏洞详情 CVE-2021-3156: 缓冲区溢出漏洞 在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢出。任何本地用户(普通用户和系统用户,sudoer和非sudoers)都可以利用此漏洞,而无需进行身份验证,攻击者不需要知道用户的密码。成功利用此漏洞可以获得root权限。 用户可以使用如下方法进行

csapp attack lab level4

完成了Part1前三个缓冲区注入代码改变返回地址的实验,现在来看看Part2.因csdn新手,所以上传pdf并不会。直接截图把 这里是介绍部分,大致说明了因为两个原因不能进行代码注入而写shellcode,一个是ALSR栈上地址随机化,一个是NX就是栈没有执行的权限。这样怎么攻击呢?有些聪明的人

go性能分析 汇编代码执行定位性能

go tool compile -S main.go $ go tool compile -S main.go "".main STEXT size=163 args=0x0 locals=0x40 ... 0x0059 00089 (main.go:6) MOVQ AX, 16(SP) 0x005e 00094 (main.go:6) MOVQ $1, 24(SP) 0x0067 00103 (main.go:6) M

att 汇编 helloworld

博主在 archlinux x86_64 下测试, gcc版本 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/10.1.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --

GO汇编-控制流

GO汇编-控制流 程序主要有顺序、分支和循环几种执行流程。本节主要讨论如何将Go语言的控制流比较直观地转译为汇编程序,或者说如何以汇编思维来编写Go语言代码。 顺序执行 顺序执行是我们比较熟悉的工作模式,类似俗称流水账编程。所有不含分支、循环和goto语句,并且没有递归调用的Go

at&a 64汇编

  1.第一个at&a 64汇编 1 .section .data 2 strFormat: 3 .asciz "%s\n" 4 strUseLibc: 5 .asciz "Hi, If you see me, you called c lib :)" 6 strUseSyscall: 7 .asciz "And if you see me, you called syscall.\n" 8 e

C++ lambda 分析

lambda 表达式分析 构造闭包:能够捕获作用域中变量的匿名函数的对象,Lambda 表达式是纯右值表达式,其类型是独有的无名非联合非聚合类类型,被称为闭包类型(closure type),所以在声明的时候必须使用 auto 来声明。 在其它语言如lua中,闭包的格式相对更为简单,可以使用 lambda 表达式作用

C++ 引用分析

引用 左值引用,建立既存对象的别名 右值引用,可用于为临时对象延长生命周期 转发引用,保持函数实参的类别 悬置引用,对象生命周期已经结束的引用,访问改引用为未定义行为 值类别,左值,纯右值,亡值 std::move, std::forward 类型推导 引用塌缩(折叠) 可以通过模板或者 typedef 中的类型操作

Golang Interface 解析

转自 https://zhuanlan.zhihu.com/p/27652856 先看一段代码: 123456789101112func (x interface{}) { if x == nil { fmt.Println("empty interface") return } fmt.Println("non-empty interface")}func main() { var x *int = nil

汇编指令:lea

lea指令变种(按大小分类): leaw #2个字节leal #4个字节leaq #8个字节 lea的用法: leaq a(b, c, d), %rax 首先lea指令是mov指令的变种,据说,lea指令是x86体系结构中,是一条最古老但是从某个方面来讲又是最神奇的指令。 表面上看,它做的事情非常简单,根据括号里的源操作数来计算地址

[golang]golang 汇编

https://lrita.github.io/2017/12/12/golang-asm/#why 在某些场景下,我们需要进行一些特殊优化,因此我们可能需要用到golang汇编,golang汇编源于plan9,此方面的 介绍很多,就不进行展开了。我们WHY和HOW开始讲起。 golang汇编相关的内容还是很少的,而且多数都语焉不详,而且缺乏细节。对于

macOS上的汇编入门(七)——字面量与局部变量

在上一篇文章中,我们分析了第一个汇编程序。 # exit.s .section __TEXT,__text .globl _main _main: movq $0, %rax retq 这个汇编程序是我们所有汇编程序的框架,因为它实现了程序进入和程序退出的功能。我们接下来所有的程序都是在这个程序的基

Go语言学习——彻底弄懂return和defer的微妙关系

疑问   前面在函数篇里介绍了Go语言的函数是支持多返回值的。   只要在函数体内,对返回值赋值,最后加上return就可以返回所有的返回值。   最近在写代码的时候经常遇到在return后,还要在defer里面做一些收尾工作,比如事务的提交或回滚。所以想弄清楚这个return和defer到底是什么