《快学 Go 语言》第 4 课 —— 低调的数组

Golang Shellcode加载器:绕过AV检测的技术原理与实践 Shellcode加载器是安全攻防领域的核心技术之一,它通过将恶意代码注入内存并执行来实现攻击。其核心原理涉及内存操作、系统调用和代码执行等底层技术,旨在规避安全软件的检测。在工程实践中,绕过检测的技术价值在于帮助安全研究人员评估防御体系的盲点,提升整体安全水位。常见的应用场景包括红队评估、安全产品自检和攻防技术研究。本文聚焦于使用Golang实现Shellcode加载器,并探讨如何通过**内存操作**和**系统调用**等热词技术来规避检测,为相关领域的研究和实践提供参考。 阅读详情

只要掌握了数据结构中的四大法宝,就可以包打天下,他们是:array 、linked list 、hash table、binary tree 。这四大法宝可不是各自为战的,灵活结合才能游刃有余。比如,一个用 hash table 组织的 symbol table,其中个个都是由字符型 array 构成的 linked list 组成的。 --- Go 语言之父 Rob Pike

Go 语言里面的数组其实很不常用,这是因为数组是定长的静态的,一旦定义好长度就无法更改,而且不同长度的数组属于不同的类型,之间不能相互转换相互赋值,用起来多有不方便之处。

切片是动态的数组,是可以扩充内容增加长度的数组。当长度不变时,它用起来就和普通数组一样。当长度不同时,它们也属于相同的类型,之间可以相互赋值。这就决定了数组的应用领域都广泛地被切片取代了。

不过也不可以小瞧数组,在切片的底层实现中,数组是切片的基石,是切片的特殊语法隐藏了内部的细节,让用户不能直接看到内部隐藏的数组。切片不过是数组的一个包装,给顽固的数组装上了灵活的翅膀,让石头也可以展翅飞翔。

仅仅是上面纯文字的说明,读者肯定会感觉很懵。下面让我们来看具体的实例。

数组变量的定义

我们先试一下只申明类型,不赋初值。这时编译器会给数组默认赋上「零值」。数组的零值就是所有内部元素的零值。

package main

import "fmt"

func main() {
    var a [9]int
    fmt.Println(a)
}

------------
[0 0 0 0 0 0 0 0 0]

package main

import "fmt"

func main() {
    var a = [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    var b [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    c := [8]int{1, 2, 3, 4, 5, 6, 7, 8}
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
}

---------------------
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9 10]
[1 2 3 4 5 6 7 8]

数组的访问

接下来我们使用下标来简单操作一下数组,这个数组里存的是数字的平方值

package main

import "fmt"

func main() {
    var squares [9]int
    for i := 0; i < len(squares); i++ {
        squares[i] = (i + 1) * (i + 1)
    }
    fmt.Println(squares)
}

--------------------
[1 4 9 16 25 36 49 64 81]

数组的下标越界检查(高阶知识)

上面的代码中我们注意到可以使用内置函数 len() 来直接获取数组的长度。数组的长度是编译期确定的,当我们使用 len() 函数访问数组的长度属性时,编译器在背后偷偷把它替换成了整数值。

package main

import "fmt"

func main() {
    var a = [5]int{1,2,3,4,5}
    a[101] = 255
    fmt.Println(a)
}

-----
./main.go:7:3: invalid array index 101 (out of bounds for 5-element array)

package main

import "fmt"

func main() {
    var a = [5]int{1,2,3,4,5}
    var b = 101
    a[b] = 255
    fmt.Println(a)
}

------------
panic: runtime error: index out of range

goroutine 1 [running]:
main.main()
    /Users/qianwp/go/src/github.com/pyloque/practice/main.go:8 +0x3d
exit status 2

数组赋值

同样的子元素类型并且是同样长度的数组才可以相互赋值,否则就是不同的数组类型,不能赋值。数组的赋值本质上是一种浅拷贝操作,赋值的两个数组变量的值不会共享。

package main

import "fmt"

func main() {
    var a = [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    var b [9]int
    b = a
    a[0] = 12345
    fmt.Println(a)
    fmt.Println(b)
}

--------------------------
[12345 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]

package main

import "fmt"

func main() {
    var a = [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    var b [10]int
    b = a
    fmt.Println(b)
}

--------------------------
./main.go:8:4: cannot use a (type [9]int) as type [10]int in assignment

数组的遍历

数组除了可以使用下标进行遍历之外,还可以使用 range 关键字来遍历,range 遍历提供了下面两种形式。

package main

import "fmt"

func main() {
    var a = [5]int{1,2,3,4,5}
    for index := range a {
  fmt.Println(index, a[index])
 }
 for index, value := range a {
        fmt.Println(index, value)
    }
}

------------
0 1
1 2
2 3
3 4
4 5
0 1
1 2
2 3
3 4
4 5

640?wx_fmt=jpeg

扫一扫二维码阅读《快学 Go 语言》更多章节

Shellcode免杀实战:对抗360、火绒、腾讯管家的分层技术策略 在网络安全领域,恶意代码的检测与规避是一场持续的技术博弈。其核心原理在于安全软件通过静态特征分析、动态行为监控和启发式引擎等多维度手段,识别并阻断异常程序活动。这项技术的价值在于帮助安全研究人员理解防御体系,从而提升渗透测试工具的隐蔽性和生存能力。应用场景广泛涉及红队评估、漏洞利用和防御策略验证。本文聚焦于Shellcode免杀这一关键技术环节,针对国内主流的360安全卫士、火绒安全软件和腾讯电脑管家,深入拆解其防御机制,并构建了一套涵盖Shellcode混淆、加载器隐身和内存操作伪装的分层对抗策略。通过结 阅读详情

相关推荐

Shellcode免杀实战:对抗360、火绒与Defender的三重防御体系

在网络安全领域,恶意软件检测与防御是攻防对抗的核心。杀毒软件通过静态特征扫描、动态行为监控和内存扫描等多层机制识别威胁。静态扫描匹配已知特征码,动态监控分析进程的敏感API调用序列,内存扫描则检测进程空间中的恶意代码片段。这些技术旨在阻止未经授权的代码执行,保护系统安全。理解这些原理对于安全研究、渗透测试和产品能力验证至关重要。本文聚焦于Shellcode免杀技术,探讨如何通过加密混淆、API调用链伪装、直接系统调用(Syscall)和进程注入等工程实践,绕过主流安全软件的检测。其中,直接系统调用(Sysc

weixin_30437847的博客 305

go int 转切片_「快学 Go 语言」第 4 课——低调的数组

数组就是一篇连续的内存,几乎所有的计算机语言都有数组,只不过 Go 语言里面的数组其实并不常用,这是因为数组是定长的静态的,一旦定义好长度就无法更改,而且不同长度的数组属于不同的类型,之间不能相互转换相互赋值,用起来多有不方便之处。切片是动态的数组,是可以扩充内容增加长度的数组。当长度不变时,它用起来就和普通数组一样。当长度不同时,它们也属于相同的类型,之间可以相互赋值。切片的便捷性让数组的绝大多...

weixin_39864738的博客 97

实战木马免杀技术:从静态特征混淆到动态行为规避

在网络安全领域,恶意软件检测与防护是攻防对抗的核心。杀毒软件主要依赖静态特征码扫描、启发式分析和行为监控等机制识别威胁。静态免杀通过编码、加密、混淆等手段改变文件二进制特征,是绕过基础检测的关键;而动态免杀则需规避沙箱分析、隐藏进程行为、伪装网络流量。这些技术对于渗透测试、红队评估及恶意软件分析具有重要价值,能帮助安全人员深入理解攻击链,从而构建更有效的防御体系。本文以 Meterpreter 木马为例,结合 Veil-Evasion 和 Shellter 等工具,演示如何通过多层技术组合实现免杀,并探讨行

weixin_30325971的博客 427

Go基础

Go基础

KaiSarH 2201

华为OD转正全攻略:从外包到正式员工的系统性攻关指南

在软件开发领域,职业发展路径与内部晋升机制是技术人员普遍关注的核心议题。其底层逻辑在于,企业通过设定明确的能力模型与考核流程,系统性评估人才的技术深度、项目贡献及文化契合度,从而实现人力资源的优化配置。这一机制的技术价值在于,它不仅保障了团队能力的持续提升,也为个人提供了清晰的成长坐标和公平的竞争环境。尤其在大型科技公司的特定用工模式下,如外包开发(OD)岗位,理解并掌握从“外部贡献者”向“内部核心成员”转化的规则与策略,成为一项关键的职业发展技能。这涉及到对技术栈的纵深掌握、项目影响力的主动构建,以及针对

weixin_33672400的博客 454

从仿真到实践:两级直接耦合放大电路的静态工作点协同调试指南

本文详细解析了两级直接耦合放大电路的静态工作点协同调试方法,从仿真到实践提供系统指南。重点介绍了Rc2电阻调整技巧、集电极电位测量方法及常见问题排查,帮助工程师解决各级静态工作点相互影响的难题,提升模拟电路设计效率。

weixin_29189373的博客 125

Go 1.20新变化!第一部分:语言特性

又到了 Go 发布新版本的时刻了!2022 年第一季度的 Go 1.18 是一个主版本,它在语言中增加了期待已久的泛型,同时还有许多微小功能更新[1]与优化[2]。2022 年第三季度的 Go 1.19 是一个比较低调[3]的版本。现在是 2023 年,Go 1.20 RC 版本[4]已经发布,而正式版本也即将到来,Go 团队已经发布了版本说明草案[5]。在我看来,Go 1.20 的影响介于 1....

Go中国 3104

openEuler 22.03 安装及配置Gitlab容器

在 openEuler 22.03 上安装及配置Gitlab容器

轻步玉阶 3317

码洞原创深度技术文章大全 —— 高端面试必备

《快学 Go 语言》第 11 课 —— 协程《快学 Go 语言》第 10 课 —— 错误与异常《快学 Go 语言》第 9 课 —— 接口《快学 Go 语言》第 8 课 —...

codehole_的博客 293

免安装版Notepad++终极配置:右键菜单+图标美化+多文件批量处理(2024新版)

本文详细介绍了如何为免安装版Notepad++进行终极配置,包括右键菜单添加、图标美化以及多文件批量处理功能。通过注册表编辑和高级定制,用户可以在便携版中实现与安装版相同的功能体验,同时保持系统整洁。特别适合开发者、系统管理员和效率追求者使用。

nut55的博客 830

VSAN 虚拟机丢失排查与恢复完整方案

VSAN虚拟机(含vCenter)显示无效 检查存储状态:登录ESXi Host Client,确认VSAN存储是否挂载。 若未挂载,通过SSH执行 手动挂载。 验证文件存在:检查虚拟机文件是否完整。 解除文件锁定:删除残留的 .lck 文件 手动注册虚拟机:强制注册虚拟机配置文件。 检查VSAN健康:验证集群节点在线、磁盘组状态正常,并测试节点间网络。 修复元数据:针对损坏对象,谨慎执行修复。 终极恢复:若数据丢失,从备份还原或联系VMware支持,提交日志

sido777的博客 2687

Coding4Fun第三期活动总结

中间件团队组织的Coding4Fun的第三期已经结束,这次参与的同学很活跃,报名的有20多人,最终有17人在gitlab上提交了代码。把这次活动以及大家的经验总结一下。任务:里有一个大文本,文件请从 http://10.125.9.144:8000/document.zip 获取,在解压后大约有20m(实际比赛时文件是1.1G)。 文本中都是英文单词,空格以及英文的标点符号:...

weixin_33910434的博客 129

Flowable第一篇、快速上手(Flowable安装、配置、集成)

Flowable是一个轻量级、高效可扩展的工作流和业务流程管理(BPM)引擎,支持在Java应用程序中实现复杂的工作流自动化。Flowable最初是作为Activiti项目的一个分支发展而来的,但它现在已经成为一个独立的开源项目,并在企业级应用中得到了广泛使用

Du_XiaoNan的博客 1万+

GoFrame带你从0-1快速入门

由于项目的需要,自己开始了解GoFrame这个框架,网上没有视频学习,所以开始看官网学习,在学习的时候,感觉GoFrame真的是一个不错的框架,整理自己的笔记。大部分和github上的一样,但是本文进行整合,方便大家的学习。

weixin_51261234的博客 1万+

支付漏洞防护绕过的一种方式

放完包后就到了提交订单的地方,可以发现,金额确实小了很多,合理的搭配的话还可以更低,再次前进可以发现,金额确实是这么多,后面就不支付了,到此就结束了。也就是说数量可以为负数,但是金额不能为0或者0以下,有什么方法可以绕过这个限制吗,其实并不难,既然可以为负数,只是对金额不能为0或者负数做了限制。我们可以尝试拼接法,利用负数加上正数让他的值变得很低,但是又大于0就可以了,这里利用购物车的结算方法,随机加一些在购物车里。这里为了方便查看数据包,我这边商品的数量选择3,点击立即购买并抓包。

2301_80115097的博客 1529

再见 n8n?Google Opal 实测:一句话生成 APP,这才是 AI 的正确打开方式!

Google Opal深度评测:这款自然语言生成工作流的AI工具,通过三个实战案例(科技早报生成器、冰箱食谱助手、爆款文案转译机)展示了其零代码开发的强大能力。它凭借Gemini 3.0 Pro和Google生态的无缝集成,将自动化门槛降至新低,预示着一个“意图驱动开发”的新时代。

莫潇羽的个人博客 849

PHP周刊2026W24 | Laravel 13.13发布、Symfony 8.1 Console改进、PHP 8.4.22/8.5.7、Packagist供应链攻击、OWASP新版十大安全风险

本周PHP生态密集更新:Laravel 13.13新增Bus::bulk()批量任务分发,Symfony 8.1推出Console组件重大改进,PHP 8.4.22/8.5.7同时发布。安全方面,Packagist遭供应链攻击波及devdojo/wave等8个包,OWASP新版十大安全风险聚焦软件供应链和vibe-coding。Yii3转向单一动作类架构,FrankenPHP以Go/Caddy技巧革新PHP应用服务器。

业精于勤荒于嬉,行成于思毁于随 252

VC Spyglass实战指南:从零开始掌握CDC约束配置与调试

本文详细介绍了如何使用VC Spyglass进行CDC约束配置与调试,从基础环境搭建到典型CDC问题调试实战,帮助开发者快速掌握跨时钟域验证技术。通过TCL脚本和SDC约束的深度解析,提升CDC验证效率,避免常见设计风险。

weixin_26757925的博客 298

11月8日云栖精选夜读 | 干货:阅读跟踪 Java 源码的几个小技巧!

今天跟大家分享一下我平时阅读源码的几个小技巧,对于阅读Java中间件如Spring、Dubbo等框架源码的同学有一定帮助。 本文基于Eclipse IDE,我们每天都使用的IDE其实提供了很多强大的功能,掌握它们,往往能够事半功倍。 热点热议 干货:阅读跟踪 Java 源码的几个小技巧! 作者:技术小能手发表在:Java技术栈 阿里巴巴数据中心双11守...

weixin_33743248的博客 230

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

lazydocker主题制作:个性化界面风格的设计指南

你是否厌倦了单调的终端界面?每天面对相同的黑白配色,是否渴望为你的Docker管理工具注入一些个性化元素?lazydocker作为一款优秀的终端Docker管理工具,提供了强大的主题定制功能,让你可以根据个人喜好打造独一无二的界面风格。 本文将带你深入探索lazydocker主题制作的全过程,从基础配置到高级定制,让你轻松掌握个性化界面设计的核心技巧。 ## 读完本文你能得到: - ✅ la...

gitblog_00870的博客 644

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【无标题】C++课程学习笔记(南科大于仕琪老师)

C++课程学习笔记(南科大于仕琪老师)

m0_38011039的博客 679

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

从逆波兰表示法到调用栈:弗里德里希·鲍尔的栈思想如何塑造现代计算

在计算机科学中,数据结构与算法是构建软件系统的基石,其中栈作为一种基础数据结构,以其后进先出的特性广泛应用于表达式求值、函数调用等核心场景。栈的工作原理源于对计算过程状态的高效管理,它通过压栈和出栈操作实现数据的临时存储与顺序访问,这一机制在硬件层面由栈指针寄存器支持,确保了操作的高性能。从技术价值看,栈不仅简化了复杂问题的处理逻辑,如编译器中的语法分析和中间代码生成,还深刻影响了计算机体系结构的设计,例如Java虚拟机字节码就基于栈式模型实现。在实际应用场景中,栈是函数调用机制的核心,每个函数调用都会在调

413
上一篇: 《快学 Go 语言》第 3 课 —— 分支与循环
下一篇: 《快学 Go 语言》第 1 课 —— Hello World
码洞
博客等级 码龄11年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值