Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >跨平台 go 编译控制

跨平台 go 编译控制

原创
作者头像
IT工作者
发布于 2022-07-22 01:45:41
发布于 2022-07-22 01:45:41
43200
代码可运行
举报
文章被收录于专栏:程序技术知识程序技术知识
运行总次数:0
代码可运行

Windows下开发, 有时候会用到一些系统库, 因此会用到syscall, 比如最近项目中需要设置Windows控制台窗口标题, 在开发时也考虑到了跨平台的情况, 还特意在代码中加了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    if runtime.GOOS != "windows" {
        
    }

但时到Linux下编译不过, 因为syscall的接口分不同平台, 有点仅支持Windows.

自然而然想到了go的编译控制:

在文件头加入如下标签:

//+build windows

然后编译的时候添加tag参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go build -tags="windows"

比如我这里就会存在两个文件 func_windows.go:

//+build windows

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package global

import (
    "syscall"
    "unsafe"
)

// 设置cmd窗口标题
func SetCmdTitle(title string) {
    kernel32, _ := syscall.LoadLibrary(`kernel32.dll`)

    sct, _ := syscall.GetProcAddress(kernel32, `SetConsoleTitleW`)

    strUtf16,_ := syscall.UTF16PtrFromString(title)

    syscall.Syscall(sct, 1, uintptr(unsafe.Pointer(strUtf16)), 0, 0)

    syscall.FreeLibrary(kernel32)

}

和 func_linux.go:

//+build linux

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制


package global

func SetCmdTitle(title string) {

}

这样在不同的平台加各自的标签进行build就可以了, 不会报错.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go中调用dll示例
package main import ( "syscall" ) func main(){ h, err := syscall.LoadLibrary("kernel32.dll") if err != nil { abort("LoadLibrary", err) } defer syscall.FreeLibrary(h) proc, err := syscall.GetProcAddress(h, "GetVersio
李海彬
2018/03/19
2.4K0
Go语言:设置命令提示符(CMD)标题
IT工作者
2023/11/29
3050
Golang下通过syscall调用win32的api
源于golang群中再次提到windows下获取磁盘空间的方法 由于golang的api并非完全跨平台, golang本身并没有直接提供windows下的方式 syscall.Syscall系列方法 当前共5个方法 syscall.Syscallsyscall.Syscall6syscall.Syscall9syscall.Syscall12syscall.Syscall15 分别对应 3个/6个/9个/12个/15个参数或以下的调用 参数都形如 syscall.Syscall(trap, nargs, a
李海彬
2018/03/21
2.4K0
再议-Golang语言MessageBox用法实例
曾几何时,大多数人最先接触电脑的时候,windows是我们第一次的尝试遨游网络世界的媒介;作为IT民工加屌丝的我也是一样。现在从C++转换到GO语言,自己也同样会做些小软件,但是现在的GO并没有提供第三方包,以前有个开发包win的;但是现在网路已经找不到踪迹了,所以就打算自己实现下,编程除了工作就是爱好了,既然你我喜欢他,就把他做好尽量完美。 以下代码是windows的API的调用思路,共参考,后面我会做个QQ刷屏的软件,因为windows用MFC我实现过,之前发布到了VC驿站的原创文章如图: QQ
李海彬
2018/03/21
2.5K0
再议-Golang语言MessageBox用法实例
免杀技术-go shellcode加载bypassAV
https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc
hyyrent
2023/04/27
2.6K0
免杀技术-go shellcode加载bypassAV
红队技术-钓鱼手法及木马免杀技巧
钓鱼是攻防对抗中一种常用的手段,攻击者通常伪装成可信任的实体,例如合法的机构、公司或个人,以引诱受害者揭示敏感信息或执行恶意操作,能快速地撕破目标的伤口进行深入利用,快速进内网进行刷分,投递木马同时需要考虑逃避杀毒软件检测,本篇文章将围绕一些常见的钓鱼手法和木马免杀对抗展开
hyyrent
2023/11/16
9280
红队技术-钓鱼手法及木马免杀技巧
小玩意:golang加载执行shellcode
今天看到一个比较好玩的东西,虽然原理很简单,但是使用golang来做还是挺新鲜,所以还是分享给大家。
七夜安全博客
2019/03/04
4.2K0
小玩意:golang加载执行shellcode
C/C++ 进程代码注入&提权&降权
如果将shellcode注入到具有特定权限的进程中,我们就可以获得与该进程相同的权限,此方法可以用于提权与降权操作,注入有多种方式,最简单的是直接将metasploit生成的有效载荷直接注入到目标进程中,并通过创建远程线程启动,还可以自己实现一个注入器,这里我们自己来实现一个提权器,可提权也可降权。
王 瑞
2022/12/28
1.1K0
C/C++ 进程代码注入&提权&降权
学员投稿 | go语言免杀360
先从exe出发 先写一个 正常的输出hello,world exe 用工具 CheckGoBuild.exe -f main.go 批量编译一下
Ms08067安全实验室
2024/12/20
1880
学员投稿 | go语言免杀360
C#中DllImport用法汇总
最近使用DllImport,从网上google后发现,大部分内容都是相同,又从MSDN中搜集下,现将内容汇总,与大家分享。
全栈程序员站长
2022/07/25
2.2K0
1.12 进程注入ShellCode套接字
在笔者前几篇文章中我们一直在探讨如何利用Metasploit这个渗透工具生成ShellCode以及如何将ShellCode注入到特定进程内,本章我们将自己实现一个正向ShellCodeShell,当进程被注入后,则我们可以通过利用NC等工具连接到被注入进程内,并以对方的权限及身份执行命令,该功能有利于于Shell的隐藏。本章的内容其原理与《运用C语言编写ShellCode代码》中所使用的原理保持一致,通过动态定位到我们所需的网络通信函数并以此来构建一个正向Shell,本章节内容对Metasploit工具生成的Shell原理的理解能够起到促进作用。
王 瑞
2023/09/01
3920
1.12 进程注入ShellCode套接字
1.7 完善自定位ShellCode后门
在之前的文章中,我们实现了一个正向的匿名管道ShellCode后门,为了保证文章的简洁易懂并没有增加针对调用函数的动态定位功能,此类方法在更换系统后则由于地址变化导致我们的后门无法正常使用,接下来将实现通过PEB获取GetProcAddrees函数地址,并根据该函数实现所需其他函数的地址自定位功能,通过枚举内存导出表的方式自动实现定位所需函数的动态地址,从而实现后门的通用性。
王 瑞
2023/07/05
2500
1.7 完善自定位ShellCode后门
Go每日一库之164:uiprogress(终端进度条)
今天给大家推荐的是在终端(terminal)下能够显示进度条的工具:uiprogress。先看下使用该包的效果图:
luckpunk
2023/10/02
5200
Go每日一库之164:uiprogress(终端进度条)
C/C++ 实现常用的线程注入
各种API远程线程注入的方法,分别是 远程线程注入,普通消息钩子注入,全局消息钩子注入,APC应用层异步注入,ZwCreateThreadEx强力注入,纯汇编实现的线程注入等。
王 瑞
2022/12/28
7710
攻防实战|钓鱼手法及木马免杀技巧
钓鱼是攻防对抗中一种常用的手段,攻击者通常伪装成可信任的实体,例如合法的机构、公司或个人,以引诱受害者揭示敏感信息或执行恶意操作,能快速地撕破目标的伤口,快速进内网进行刷分,投递木马同时需要考虑逃避杀毒软件检测,本篇文章将围绕一些常见的钓鱼手法和木马免杀对抗展开
亿人安全
2023/11/21
1.7K0
攻防实战|钓鱼手法及木马免杀技巧
基础免杀手法暴风吸入
不同的杀软对数字签名的敏感性不同,有些杀软可能只检查一下有没有数字签名就过了,有些杀软可能要去验证一下数字签名的正确性,有些可能管都不管数字签名。只能说添加数字签名能稍微提升一下exe的免杀几率。
ConsT27
2022/03/15
1.5K0
基础免杀手法暴风吸入
shellcode编写指南
linux的shellcode就不用说了,直接通过一个int 0x80系统调用,指定想调用的函数的系统调用号(syscall),传入调用函数的参数,即可,懂的都懂。
Gamma实验室
2021/03/10
1.7K0
shellcode编写指南
自写go加载器加壳免杀——过国内主流杀软
基本的go结构:所有的函数都从main函数开始加载,如果没有放入函数,则不会执行该函数。
乌鸦安全
2021/11/16
4.9K2
自写go加载器加壳免杀——过国内主流杀软
实战 | 记一次Bypass国外杀毒的主机渗透经历
这个好,直接jboss,一般可先尝试弱口令后台部署war包,后门文件进行压缩,改名为“.war”:
HACK学习
2021/06/24
2.3K0
实战 | 记一次Bypass国外杀毒的主机渗透经历
go 对windows api的调用
package main import ( "syscall" ) func abort(funcname string, err string) { panic(funcname + " failed: "+err) } func print_version(v uint32) { major := byte(v) minor := uint8(v >> 8) build := uint16(v >> 16) print("windows version ", m
李海彬
2018/03/27
2.7K0
相关推荐
Go中调用dll示例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验