Go语言中文网 为您找到相关结果 76

脑洞大开:用Go来保护我们的Jar程序

反编译带来的困扰 对于一个开发给自己组织内部用的程序,这么做其实是非常多此一举的,但是对于商业软件来说,这又显得有必要,软件行业现在的竞争非常的激烈,大家可以把竞争对手的程序搞过来反编译一下,轻易的知道对手基于什么软件来做,或者能够比较容易知道实现原理,然后。。抄抄抄,换个名字,完事,一个全新的产品就出来了。对于Java来说这个问题就更加明显了。虽然有类似ZKM这样的商业软件来进行混码,但是混码后只要你有耐心,还是有很大机会能读懂的 在这里不得不吐槽一下,ZKM实在太难用了 怎么保护我们的Jar文件 这里我们只讨论胖胖的Jar包(就是那种全部都打在一起直接java -jar就能跑的包,例如Spring Boot打出来的)。 对于防止反编译来说,Golang这类打包出来就是二进制的方式其实就非...阅读全文

博文 2017-08-15 08:05:08 小埋酱

11.蛤蟆笔记go语言——内存分配器

11.蛤蟆笔记go语言——内存分配器 内存分配器,又叫做MemoryAllocator. 核心:自主管理,缓存复用,无锁分配。 内存管理以页为基本单位,多个地址连续页构成内存块。 页是page, 连续页是span. 按 8 倍数,将小对象分成多种大小规格。size class. 三级管理机构 三级管理机构如下图1: 算法依赖连续地址,预留较大地址空间。如下图2: 按页保存 span指针。 反查 object 所属 span。 检查相邻 span 是否可合并。 快速分配,按需扩张。 如下图3: 垃圾回收 垃圾回收器引发回收操作。如下图4: 为管理对象分配内存,不占用预留地址 图5...阅读全文

博文 2016-06-19 23:00:01 notbaron

Golang中位运算的详细理解

前言:位运算可能在平常的编程中使用的并不多,但涉及到底层优化,一些算法及源码可能会经常遇见。今天就学习一下常用的位运算一、常用的位运算: & 与 AND | 或OR ^ 异或XOR &^ 位清空 (AND NOT) << 左移 >> 右移 二、位运算的用法: 位运算都是在二进制的基础上进行运算的,所以在位运算之前要先将两个数转成二进制1. & & 只有两个数都是1结果才为1 例:var i uint8 = 20 var j uint8=15 求i&j i转成二进制为0001 0100, j转成二进制为0000 1111 0001 0100 & 0000 1111 = 0000 0100 0000 0100对应的十进制就是4 2. | 或 两个数有一个是1 结果就是1 0001 0100 | ...阅读全文

博文 2019-02-01 11:31:39 skh2015java

Golang反射机制的实现分析——reflect.Type类型名称

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/breaksoftware/article/details/85995767 现在越来越多的java、php或者python程序员转向了Golang。其中一个比较重要的原因是,它和C/C++一样,可以编译成机器码运行,这保证了执行的效率。在上述解释型语言中,它们都支持了“反射”机制,让程序员可以很方便的构建一些动态逻辑。这是C/C++相对薄弱的环节,而Golang却有良好的支持。本系列,我们将通过反汇编Golang的编译结果,探究其反射实现的机制。(转载请指明出于breaksoftware的csdn博客) 为了防止编译器做优化,例子中的源码都通过下面的指令编译 go build -gcflags...阅读全文

博文 2019-01-09 19:11:31 breaksoftware

兄弟连区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理一

区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 # 椭圆曲线加解密及签名算法的技术原理及其Go语言实现 椭圆曲线加密算法,即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。 相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全。 据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。 椭圆曲线在密码学中的使用,是1985年由Neal Koblitz和...阅读全文

博文 2018-11-09 13:51:31 ITXDL

ARTS第四周打卡(2019.04.08~2019.04.14)

所谓A(Algorithm)R(Review)T(Tips)S(Share): . 每周至少做一个 leetcode 的算法题 . 阅读并点评至少一篇英文技术文章 . 学习至少一个技术技巧 . 分享一篇有观点和思考的技术文章 3 week Algorithm 算法 # # @lc app=leetcode.cn id=5 lang=python # # [5] 最长回文子串 # # https://leetcode-cn.com/problems/longest-palindromic-substring/description/ # # algorithms # Medium (24.34%) # Total Accepted: 48.5K # Total Submissions: 195...阅读全文

2019CISCN分赛区re题一个

easyGo查看文件格式,是ELF文件,放进虚拟机运行试一试 运行 用ida打开,根据题干提示:Golang语言去符号化逆向题目,首先需要考虑符号表修复https://github.com/sibears/IDAGolangHelper需要加载该py插件,使用方法:用File->Script File加载脚本文件,选Rename Function,如图 去Go Golang的主程序为main_main,F5反编译,发现最后有一个if分开输出两个结果,在此下一个断点 断点 再使用ida动态调试虚拟机中ELF文件, 动态调试 动调时,配合伪C代码感觉寄存器有点不对,查看寄存器,在RDX中发现flag flag 提取flag{92094daf-33c9-431e-a85a-8bfbd5df98ad...阅读全文

博文 2019-07-25 02:32:45 hefengzeng

go语言20小时从入门到精通(三、运算符)

##3.1 算术运算符 ##3.2 关系运算符 ##3.3 逻辑运算符 ##3.4 位运算符 位运算参考 &与:需要两个输入数的同一位都为1时才为1,其余为0 |或:两个输入数的同一位都不为0(即任意一个为1,或都为1)为1,其余为0 ^异或:两个输入数的同一位不同为1,如果相同就设为0 ~取反:对一个操作数的每一位都取反 <<左移:头部一位被丢弃位,尾部一位空位用0填充 >>右移:尾部一位被丢弃,头部一位空位用0填充 ##3.5 赋值运算符 ##3.6 其他运算符 3.7 运算符优先级 在Go语言中,一元运算符拥有最高的优先级,二元运算符的运算方向均是从左至右。 下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低...阅读全文

博文 2019-09-18 01:34:45 后端小黑胖

Go语言如何编译出和GCC完全一致的ELF 二进制文件

* 在项目中需要开发一个程序部署到客户的服务器, * 为了防止程序逻辑被反编译,所以采购了威步的加密服务 * 但是,威步在加密GCC编译的二进制可以争取执行 * 而用来加密go 编译出来的二进制,一执行就Segment Fault * 哪位大侠知道如何可以让go编译出与Gcc完全一致的ELF二进制文件呢? * 多...阅读全文

深入浅出:举个????解读原码、反码和补码

先来看一道 Go 语言中简单的运算题: package main import "fmt" func main() { var a int8 = -128 var b = a / -1 fmt.Println(b) } 复制代码在 Go 语言中,int8 代表有符号 8 位整数。你觉得输出结果是什么呢?我们在文末再公布答案,在此之前,我们先来回顾一下有符号整数是什么。 有符号整数 一个数在计算机中的二进制表示称为机器数,这个机器数是带符号的。它的最高位是符号位,0 代表正数,1 代表负数。 以 8 位有符号整数为例,0000 0001 代表十进制中的 1,1000 0001 则代表十进制中的 -1。 那么,你可能会问了:这样一来,8 位有符号整数的可表达范围应当是 [1111 1111, 0...阅读全文

博文 2019-11-27 16:04:18 江不知

[用Golang刷LeetCode之 4] 476. Number Complement

题目描述 Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation. Note: The given integer is guaranteed to fit within the range of a 32-bit signed integer. You could assume no leading zero bit in the integer's binary representation. Example 1: Input: 5 Output: 2 Explanation: The b...阅读全文

博文 2017-08-14 09:05:01 miltonsun

Go interface实现分析

本文介绍了Go语言中接口(interface)的内部实现、nil interface和nil的区别以及使用时的一些坑。上篇文章回顾:Elasticsearch SQL用法详解前言接口(interface)代表一种“约定”或“协议”,是多个方法声明的集合。允许在非显示关联情况下,组合并调用其它类型的方法。接口无需依赖类型,带来的优点就是减少调用者可视化方法,隐藏类型内部结构和具体方法实现细节。虽然接口的优点有很多,但是接口的实现是在运行期实现的,所以存在其它额外的开销。在日常开发过程中是否选择接口需要根据场景进行合理的选择。1、接口定义一个接口需要包括方法签名,方法签名包括:方法名称、参数和返回列表。接口内不能有字段,而且不能定义自己的方法,这主要是由于字段和方法的定义需要分配内存。packa...阅读全文

博文 2018-12-23 21:29:11 小米运维

go语言渐入佳境[6]-operator运算符

运算符和其他语言一样,Go语言支持多种运算符,用于对变量进行运算。12345678910111213package mainimport "fmt"func main(){ //math() //relation() //logic() //wei() Assign()}算术运算符123456789101112func math(){ a := 4 b:=2 fmt.Printf("a+b的结果为:%d\n", a+b) fmt.Printf("a-b的结果为:%d\n", a-b) fmt.Printf("a*b的结果为:%d\n", a*b) fmt.Printf("a/b的结果为:%d\n", a/b)}关系运算符123456789101112131415161718192021222...阅读全文

博文 2018-12-04 00:35:13 jonson_jackson

得到Go程序的汇编代码的方法

有多种方式可以获得Go程序的汇编代码, 尽管输出的格式有些不同,但是都是方便阅读的汇编代码,可以帮助我们更好的了解程序的底层运行方式。 我们看下面一段代码, 它是sync.Once的实现,去掉了不必要的注释,复制出来用来研究的一段小代码。 once.go1234567891011121314151617type Once struct { m sync.Mutex done uint32}func (o *Once) Do(f func()) { if atomic.LoadUint32(&o.done) == 1 { return } o.m.Lock() defer o.m.Unlock() if o.done == 0 { defer atomic.StoreUint32(&o.don...阅读全文

博文 2018-12-29 15:30:33 smallnest

golang leetcode 1106 解析布尔表达式

根据题意我们可以知道,一个运算符一定会跟随一对括号,比如 !(t)。 所以我们可以直接判断expression[0],得到最外层的运算符,根据运算符处理内层的表达式。 如果不是运算符,肯定就是 't'或者 'f' 直接判断即可 如果是't',里面要么就是单一的字符,要么就是一个新的表达式。再调用parseBoolExpr解析并取反即可。 如果是 '&' 或者 '|', 需要对里面每个表达式分别求解。通过括号匹配,拿到第一个'('匹配的')'里面的表达式,再通过 parseBoolExpr 计算出值。 在计算 '&' 的时候,如果有一个值为false,可以提前结束计算。同理,在计算'|'时, 如果有一个值为true,也可以提前结束计算。 完整代码见下: func parseBoolExpr(e...阅读全文

博文 2019-07-03 13:32:41 Tibbersshao

位运算

位运算思考题 func main() { var a int = 1 >> 2 //位右移 var b int = -1 >> 2 var c int = 1 << 2 //位左移 var d int = -1 << 2 //a,b,c,d 结果是多少 fmt.Println("a=", a) fmt.Println("b=", b) fmt.Println("c=", c) fmt.Println("d=", d) } func main() { fmt.Println(2&3) //位与 fmt.Println(2|3) //位或 fmt.Println(13&7) fmt.Println(5|4) //? fmt.Println(-3^3) //?//位异或 } 原码、反码、补码 对于...阅读全文

博文 2019-02-19 12:34:42 StevenQin

Golang正则表达式

语法规则 字符类匹配表达式 语法 说明 示例 匹配结果 一般 匹配本身 abc abc . 匹配任意除换行符"\n"外的字符 a.c abc \ 转义字符,使后一个字符改变原来的意思 a\.c a.c [...] 字符集(字符类),对应的位置可以是字符集中任意字符[abc]。也可以给出范围[a-c],第一个字符如果是 ^ 则表示取反,如 [^abc] 表示除了abc之外的其他字符。 a[bcd]e abe,ace,ade \d 数字:[0-9] a\dc a1c \D 非数字:[^\d] a\Dc abc \s 空白字符:[<空格>\t\r\n\f\v] a\sc a c \S 非空白字符:[^\s] a\Sc abc \w 单词字符:[A-Za-z0-9] a\wc abc \W 非单词字...阅读全文

博文 2020-05-21 19:33:20 也疯狂

Golang中位运算的详细理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kwame211/article/details/79193164 前言: 位运算可能在平常的编程中使用的并不多,但涉及到底层优化,一些算法及源码可能会经常遇见。今天就学习一下常用的位运算 一、常用的位运算: & 与 AND | 或OR ^ 异或XOR &^ 位清空 (AND NOT) << 左移 >> 右移 二、位运算的用法: 位运算都是在二进制的基础上进行运算的,所以在位运算之前要先将两个数转成二进制 1. & & 只有两个数都是1结果才为1 例:var i uint8 = 20 var j uint8=15 求i&j i转成二进制为0001 0100, j转成二进制为0000 1111 0...阅读全文

博文 2019-01-14 14:31:35 kwame211

golang-crc16( C语言的翻译版)

C语言 ``` static const U16 crctab16[] = { 0X0000, 0X1189, 0X2312, 0X329B, 0X4624, 0X57AD, 0X6536, 0X74BF, 0X8C48, 0X9DC1, 0XAF5A, 0XBED3, 0XCA6C, 0XDBE5, 0XE97E, 0XF8F7, 0X1081, 0X0108, 0X3393, 0X221A, 0X56A5, 0X472C, 0X75B7, 0X643E, 0X9CC9, 0X8D40, 0XBFDB, 0XAE52, 0XDAED, 0XCB64, 0XF9FF, 0XE876, 0X2102, 0X308B, 0X0210, 0X1399, 0X6726, 0X76AF, 0X4434...阅读全文

博文 2019-02-21 18:45:17 xiaohaoxiong

折半查找算法的变形情况; 前后端各自有序,整体无序

``` package main import ( "fmt" ) // 一分为2, 肯定有一半是有序的 func BinarySearchDef(data []int, key int, low int, high int) int { if len(data) == 0 { return -1 } // 先找有序的一半,然后判定时候在该范围内, 注意临界值 for low <= high { mid := low + (high-low)/2 fmt.Println(mid) fmt.Println(data[mid]) if key == data[mid] { return mid } // 如果 key 比中间值小 if key < data[mid] { if key == da...阅读全文

博文 2018-06-29 15:00:00 wcz3043

Golang学习笔记-变量,常量,运算符

变量 Go变量命名和C语言一样,由字母、数字、下划线组成,其中首个字符不能为数字,声明变量的形式为: var identifier type var identifier1, identifier2 type 例如: var strValue string var intValue1,intValue2 int 如果没有初始化,则变量默认为零值(数值类型为0,布尔类型为false,字符串为空字符串,指针,数组,函数等为nil)。 当有初始值时可不指明类型,这个时候编译器会根据值自行推断类型。 var strValue="hello" var intValue1=2 使用初始值声明变量且不指明类型时可省略var,将=替换为:=,:=左边的变量必须是未声明过的。 strValue := "hel...阅读全文

博文 2019-09-27 23:33:01 aside section ._1OhGeD

Go 中的性能测量

Vincent Blanchon 2019 年 9 月 19 日 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/intrumentation-in-go/1.png) “A Journey With Go” 专属插图,由 Renee French 根据原始 Go Gopher 制作。 ℹ️ *本文基于 Go 1.13.* `go test` 命令提供了许多出色的功能,比如代码覆盖率,CPU 和 内存分析。要提供这些统计信息,Go 就需要一种方式来跟踪 CPU 使用率,或在代码覆盖中跟踪一个函数何时被用到。 ## 性能测量 Go 使用多种方式来产生这些统计信息: - 动态插入性能测量语句,使其可以跟踪到...阅读全文

博文 2020-03-12 21:07:56 krystollia

2018-08-08

go 汇编 编译一个最简单的go执行程序 package main import "fmt" func main(){ fmt.Println("helloworld") } go build -gcflags "-N -l" test.go 使用go tool objdump 反汇编 go tool objdump test >test.asm gdb test goasm1.png 我们看到汇编的入口地址位于0x452100,打开test.asm TEXT _rt0_amd64_linux(SB) /usr/local/go/src/runtime/rt0_linux_amd64.s rt0_linux_amd64.s:8 0x452100 488d742408 LEAQ 0x8(SP)...阅读全文

博文 2018-08-08 12:34:46 myonlyzzy

Go-数组与slice

本文将讲解Go语言中的数组与slice。之前看到网上好多 《深入理解slice》、《深入解析slice》... 的文章,我是比较佩服的,他们从应用、源码、汇编代码等各个角度分析了slice与数组,感叹他们已经领先自己好多了,于是把他们的文章结合源码自己学习了一遍。 佩服之余,也在想我有必要再写一篇吗?本着记录自己学习成果、便于新手入门的原则,我还是自己写一篇。尽量不写汇编,免得吓跑大家~ 本文不但会讲解slice的结构、存储,还会将slice常见的api分析一下。 1 数组 数组是一块连续的内存。其定义了类型跟长度。因为其长度固定,不易扩展,所以在Go语言中,我们很少直接使用数组。个人理解,数组更多地是作为slice的底层存储来使用。 2 slice slice可以理解为其他语言中的动态数组...阅读全文

博文 2019-09-24 20:32:55 aside section ._1OhGeD

5.2.5Golang的运算符

目录:https://www.jianshu.com/p/e406a9bc93a9 运算符 golang的运算符有五种: 1.算术运算符 2.比较运算符 3.逻辑运算符 4.位运算符 5.赋值运算符 算术运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 例子: var ( a = 5 b = 2 ) // 算术运算符 fmt.Println("a + b:",a + b) fmt.Println("a - b:",a - b) fmt.Println("a * b:",a * b) fmt.Println("a / b:",a / b) fmt.Println("a % b:",a % b) a ++ // go语言中的 ++ -- 是一个单独的语句 fmt.Print...阅读全文

博文 2020-03-16 17:32:56 寒暄_HX