美文网首页
go hack(十九)cgo实现go和c的相互调用

go hack(十九)cgo实现go和c的相互调用

作者: mafa1993 | 来源:发表于2022-09-17 14:32 被阅读0次

准备工作

  1. 安装msys2 对c进行编译

go里面嵌入c

  1. go支持在编译时对注释进行编译,支持多种语言的注释编译
  2. cgo 可以go代码调用c或者c调用go,如果先要使用go的垃圾回收和内存管理,需要在go中申请内存,传给c,除非使用free(), 不然不会对内存进行释放,使用defer可以确保go中引用的所有c内存都会进行垃圾回收

c调go

  1. 将go编译到一个归档文件中,然后c将归档文件编译到dll中
  2. 需要先将go编译成插件 go build -buildmode=c-archive 会生成一个.a文件
  3. gcc -lpthread .\main.c .\main.a 生成exe
  4. gcc -shared -pthread -o x.dll .\main.c .\main.a 生成dll
go-hack\cgo\shellcode> .\a.exe
go

使用sRDI(git上搜索)可以将dll转化为shellcode

使用PowerSploit实现shellcode注入

// go调用c

package main

// go调用c,会弹出一个框

/*
#include <stdio.h>
#include <windows.h>

void box(){
    MessageBox(0,"ddd","aa",MB_OK);
}

*/
import "C"

func main() {
    C.box()
}

// c调用go

// main.go
package main

import (
    "C"
    "fmt"
)

// 下面的注释代表导出一个函数叫Start

//export Start
func Start() {
    fmt.Println("go")
}

// main为空即可
func main() {}

// main.c

#include "main.h"

void (*table[1]) = {Start};

void main(){
    Start();
}

相关文章

  • go hack(十九)cgo实现go和c的相互调用

    准备工作 安装msys2 对c进行编译 go里面嵌入c go支持在编译时对注释进行编译,支持多种语言的注释编译 c...

  • Go与c++混合编程

    利用cgo实现go调用c/c++的接口

  • cgo

    cgo cgo是用来在Go语言中调用C语言的工具 Go语言调用C语言 简单C语言函数 在Go语言中需要通过impo...

  • CGO使用

    CGO基础介绍 Go语言通过自带的一个叫CGO的工具来支持C语言函数调用,像go调用一些著名的开源库 ffmpe...

  • Go调用C/C++

    cgo golang是类C的语言 支持调用C接口(不支持调用C++)Go调用C/C++的方式 : C : 直接调用...

  • Go语言使用cgo时的内存管理笔记

    先放结论 使用cgo时: 和日常Go对象被gc管理释放的表现略有不同的是,Go和c代码的类型相互转化传递时,有时需...

  • golang C 混编

    简单例子 cGo.go 稍复杂例子 callC.h callC.c callC.go

  • go语言与c语言的相互调用

    由于工作原因,需要实现go语言与c语言的相互调用。由于go语言与c语言有着千丝万缕的暧昧关系,两者之间的调用可以通...

  • golang调用c语言代码-cgo方式

    1.cgo简单调用 官方文档:The Go file will have access to anything a...

  • CGO编程

    1)什么是CGO编程?2)CGO语法3)相关资料 一、什么是CGO编程?简单说就是GO语言代码中可以编写C代码和调...

网友评论

      本文标题:go hack(十九)cgo实现go和c的相互调用

      本文链接:https://www.haomeiwen.com/subject/vsbyortx.html