《快学 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

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

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

413

Go基础

Go基础

KaiSarH 2201

爬取二手房数据:Python爬虫+Geopy实战,看透房价与地理位置的隐藏关系

哪些区域单价虚高(房源少但单价远高于周边);哪些小区性价比高(靠近地铁/学校,单价低于同地段平均水平);房价与地理位置的量化关系(如距离地铁每远1公里,单价下降多少)。如果想扩展分析范围,可爬取多个城市/区域的数据,对比不同城市的房价差异;或结合时间维度(定期爬取),分析房价的涨跌趋势。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 950

三维变换矩阵实战——三维点云的旋转、缩放、镜像、错切、平移、正交投影

旋转矩阵:右边矩阵是点云的原始坐标,左边的是旋转矩阵可视化:绕x轴旋转90度。

weixin_43850909的博客 8231

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

计算机视觉之ResNet

RestNet是2015年由微软团队提出的,在当时获得分类任务,目标检测,图像分割第一名。该论文的四位作者何恺明、张祥雨、任少卿和孙剑如今在人工智能领域里都是响当当的名字,当时他们都是微软亚研的一员。实验结果显示,残差网络更容易优化,并且加深网络层数有助于提高正确率。在ImageNet上使用152层的残差网络(VGG net的8倍深度,但残差网络复杂度更低)。对这些网络使用集成方法实现了3.75%的错误率。获得了ILSVRC 2015竞赛的第一名。原文链接这是一篇计算机视觉领域的经典论文。

十年以上架构设计经验,专注于软件架构和人工智能领域,对机器视觉、NLP、音视频等领域都有涉猎 2万+

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

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

codehole_的博客 293

C# NX二次开发:两种过滤器设置方案的实战解析与场景适配

本文深入解析C# NX二次开发中的两种过滤器设置方案:AddFilterHandler回调与MaskTriple属性设置。通过实战案例对比其性能差异与适用场景,帮助开发者根据需求选择最优方案,提升NX插件开发效率与交互体验。特别针对BlockStyler集成场景提供专业建议,是NX二次开发者的实用指南。

weixin_33739646的博客 846

FreeSWITCH实战:5分钟搞定阿里云SDM(MRCP-SERVER)语音机器人搭建(含Docker部署技巧)

本文详细介绍了如何利用FreeSWITCH与阿里云SDM(MRCP-SERVER)快速搭建高可用语音机器人,包括Docker部署技巧、系统调优及高可用架构设计。通过实战案例和优化建议,帮助开发者5分钟内完成部署,提升语音交互系统的性能和稳定性。

stone的博客 505

Coding4Fun第三期活动总结

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

weixin_33910434的博客 129

AI Agent 入门(一):什么是 AI Agent?——从概念到第一个 API 调用

AI Agent 入门(一):什么是 AI Agent?——从概念到第一个 API 调用

nbtang的博客 257

GoFrame带你从0-1快速入门

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

weixin_51261234的博客 1万+

详解Xilinx FPGA高速串行收发器GTX/GTP(6)--Pattern Generator/Pattern Checker

详解Xilinx FPGA高速串行收发器GTX/GTP(6)--Pattern Generator/Pattern Checker

孤独的单刀 1629

【AI 智能体】Windows 环境 Hermes Agent(爱马仕)安装详细过程

Windows 环境 Hermes Agent(爱马仕)安装详细过程

congge_study的博客 1833

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

weixin_33743248的博客 230

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

工程师成长指南:从方向选择到职场进阶的实战经验

在技术职业发展过程中,清晰的学习路线和正确的方向选择是每位开发者都要面对的课题。从编程语言基础到数据结构与算法,再到框架与工具链的掌握,构成了工程能力的基本盘。理解后端系统的高并发处理、数据一致性与性能优化等原理,能帮助工程师在真实业务场景中做出合理的技术决策。无论是计算机科班还是非科班转行,通过项目实践积累经验、在面试中系统复盘、在职场中持续学习,都是通往进阶的必经之路。本文从方向选择、学习路径、求职技巧到职场进阶,结合一线实践,给出行之有效的参考经验。

weixin_33861800的博客 423

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

codebase-memory-mcp通用包模块解析:跨10种manifest的裸说明符解析

codebase-memory-mcp 是一款高性能代码智能 MCP 服务器,它把整个代码库索引成持久化知识图谱,平均仓库毫秒级完成、支持 158 种语言。本文聚焦其中低调但关键的 **pkgmap(通用包模块解析)** 模块:它如何在一次索引中识别 10 种以上的包管理 manifest 文件,把 `"@myorg/pkg"`、`github.com/foo/bar` 这类**裸说明符(bare

gitblog_00085的博客 569

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

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

gitblog_00870的博客 644

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

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

m0_38011039的博客 679
上一篇: 《快学 Go 语言》第 5 课 —— 神奇的切片
下一篇: 《快学 Go 语言》第 6 课 —— 字典
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值