Skip to content

Latest commit

 

History

History
75 lines (52 loc) · 4.42 KB

README_zh.md

File metadata and controls

75 lines (52 loc) · 4.42 KB

gohack

Build Status Codecov Go Report Card License

English Version

gohack提供了一种设计和源码,借助此你可以读取修改协程结构体runtime.g的任意字段,甚至其他运行时未导出的结构的内容。

介绍

gohack通过查找运行时符号表typelinks获取未导出的结构类型,通过该类型可获取到结构体的字段偏移量。

当要读取该类型的其他变量的字段时,通过另一个简化的汇编只获取地址,该方式开销小,并将地址偏移然后读写内容。

该库演示了如何获取runtime.g的类型,并获取到关键字段的偏移量。

然后读取当前协程结构体runtime.g的地址,偏移指针地址,然后读写字段。

需要注意的是该方式开销极小,并且兼容未来的go版本,并且支持跨平台(386amd64armv6armv7arm64loong64mipsmipslemips64mips64leppc64ppc64leriscv64s390xwasm)。

使用

gohack没有提供任何公开的接口。

gohack的目标是提供一种思路和源码实现。

如果你觉得该仓库对你有所帮助,请 ForkStar

routine 是一个 tls 库,由 gohack 提供技术支持。

支持网格

darwin linux windows freebsd js
386 386
amd64 amd64
armv6 armv6
armv7 armv7
arm64 arm64
loong64 loong64
mips mips
mipsle mipsle
mips64 mips64
mips64le mips64le
ppc64 ppc64
ppc64le ppc64le
riscv64 riscv64
s390x s390x
wasm wasm
darwin linux windows freebsd js

✅:支持

许可证

gohack是在 Apache License 2.0 下发布的。

Copyright 2021-2024 TimAndy

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.