go语言中linkname的用法
作者:暮雨 发布时间:2024-02-07 10:48:39
标签:go,linkname
在go语言的源码中,会发现很多,代码只有函数签名,却看不到函数体,如:
// src/os/proc.go 68行
func runtime_beforeExit() // implemented in runtime
此处我们只看到函数签名,却看不到函数体,全局搜了一把,发现它的函数体却定义在src/runtime/proc.go
中
// os_beforeExit is called from os.Exit(0).
//go:linkname os_beforeExit os.runtime_beforeExit
func os_beforeExit() {
if raceenabled {
racefini()
}
}
它是通过go:linkname把函数签名和函数体连接在一起的。那么我们在代码中,可以这样实现么?既然库函数中,可以这么用,那我们自己的代码结构中是不也可以这么用?以下通过实验的方式,一步一步的实现这样的用法
创建项目目录
$mkdir demo && cd demo
go mod初始化项目目录
$go mod init demo
创建函数签名pkg和函数体pkg
$mkdir hello
$mkdir link
编写测试代码
$cd hello
// 函数签名
$vim hello.go
package hello
import (
_ "demo/link"
)
func Hello()
// 函数体
$vim link.go
package link
import _ "unsafe"
//go:linkname helloWorld demo/hello.Hello
func helloWorld() {
println("hello world!")
}
执行代码
$cd demo
vim demo.go
package main
import (
"demo/hello"
)
func main() {
hello.Hello()
}
编译运行
go run demo.go
# demo/hello
hello/hello.go:7:6: missing function body
在hello文件夹下添加aa.s的汇编文件标示,便可以通过编译执行
$cd hello && touch aa.s
$go run demo.go
hello world!
总结
以上所述是小编给大家介绍的go语言中linkname的用法,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://studygolang.com/articles/22593
0
投稿
猜你喜欢
- 本文教大家调用电脑摄像头进行实时人脸+眼睛识别+微笑识别,供大家参考,具体内容如下一、调用电脑摄像头进行实时人脸+眼睛识别# 调用电脑摄像头
- 本文实例讲述了Python中shape计算矩阵的方法。分享给大家供大家参考,具体如下:看到机器学习算法时,注意到了shape计算矩阵的方法接
- 前言需求: 必须现在需要动态创建16个list,每个list的名字不一样,但是是有规律可循,比如第一个list的名字叫:arriage_li
- 纪念我的第一个爬虫程序,一共写了三个白天,其中有两个上午没有看,中途遇到了各种奇怪的问题,伴随着他们的解决,对于一些基本的操作也弄清楚了。果
- 信息架构的组件可以拆分成四类组织系统 如何组织信息,例如,依据主题或年代顺序。标签系统 如何表示信息,例如,科学术语(“Acer”)或通俗术
- debug的时候,有时希望打印某些东西,但是如果代码段刚好在一个循环或者是其他会被执行很多次的部分,那么用来print的语句也会被执行很多次
- 前言我们实战经常会遇到以下几个问题:1、遇到一个利用步骤十分繁琐的漏洞,中间错一步就无法利用2、挖到一个通用漏洞,想要批量刷洞小赚一波,但手
- 装完数据库清理一些默认账号的时候不小心把root删除了,flush privileges 之后的新 root 忘了grant任何权限,查看m
- 之前写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统。blog系统很简单,只有一个页面,然后麻雀虽小五脏俱全。这里
- 本文实例讲述了scrapy自定义pipeline类实现将采集数据保存到mongodb的方法。分享给大家供大家参考。具体如下:# Standa
- 前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,
- 生成.bmp格式的文件.bmp格式的图片是未压缩的图片,相比于.raw格式,需要加上头文件。下面以大小为M*N的图片为例,说明头文件格式和内
- 如何导入数据库 可以从限制文件中导入SQL共享服务器数据库。如果想把存放在其他地方的数据导入,需要先把其内容拷到限制文件中。(注:在导入数据
- Django url pathDjango 路由在 urls.py 配置path('浏览器地址栏表示URL', '处
- centos下安装配置phpmyadmin,我花了二个晚上,郁闷的我不行,配置phpmyadmin简单吧,很简单,我刚工作的时候,就配置过,
- 最近在老家找工作,无奈老家工作真心太少,也没什么面试机会,不过之前面试一家公司,提了一个有意思的需求,检测河面没有有什么船只之类的物体,我当
- 1、下载python3.6的安装包: wget https://www.python.org/ftp/p
- 1 概述1.1 无监督学习 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区
- 除了使用Django内置表单,有时往往我们需要自定义表单。对于自定义表单Post方式提交往往会带来由CSRF(跨站请求伪造)产生的错误&qu
- 《Python for Data Analysis》GroupBy分组运算:split-apply-combine(拆分-应用-合并)Dat