Deadline

Posted by 夏泽民

https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/ https://colobu.com/2016/07/01/the-complete-guide-to-golang-net-http-timeouts/ 当用Go写HTTP的服务器和客户端的时候,超时处理总是最易犯错和最微妙的地方之一。错误可能来自很多地方,一个错误可能等待很长时间没有结果,直到网络故障或者进程挂起。



CFLAGS

Posted by 夏泽民

https://golang.org/cmd/cgo/ CFLAGS, CPPFLAGS, CXXFLAGS, FFLAGS and LDFLAGS may be defined with pseudo #cgo directives within these comments to tweak the behavior of the C, C++ or Fortran compiler. Values defined in multiple directives are concatenated together. The directive can include a list of build constraints limiting its effect to systems satisfying one of the constraints (see https://golang.org/pkg/go/build/#hdr-Build_Constraints for details about the constraint syntax). For example:



tags

Posted by 夏泽民

在某个项目需要支持多平台时,某个功能可能需要针对不同平台编写专属这个平台的具体实现。 在c/c++中,不同平台的实现或者某个平台的特性往往通过#if, #else, #endif这类预处理指令来配合 交叉编译达到。



Go写的程序需不需要glibc

Posted by 夏泽民

go build编译时,CGO_ENABLED=1的,自动添加了一些动态库链接,所以编译时吧CGO_ENABLED=0就OK了 go 要求的编译工具gcc libc6-dev 一般系统都自带了如果没有自行安装。 Golang 程序如此大的一个原因是它全是静态链接的。如果能用到动态链接,可以让各个 Golang 程序共用一个标准库,大大减少 RAM 和 ROM 的使用 我尝试用 OpenWrt buildroot 编译带 Golang 支持的 GCC,在解决几个编译错误后终于编译出 gccgo 和 libgo.so 共享标准库 结果用 gccgo 编译 helloworld 时,在链接时找不到几个 setcontext 等符号,查了下才发现 musl libc 没有实现 ucontext…… 得,又在 GitHub 上找了个 https://github.com/kaniini/libucontext (暂时没有 MIPS),编译好后在 gccgo 加上参数 -lucontext 终于不报错了,程序大小只有 10kB 把程序和几个共享库传到我的 ARM 上,ldd 好像没有问题



hook glibc

Posted by 夏泽民

Linux的用C库的都是glibc,有一个叫libc.so.6的文件,这是几乎所有Linux下命令的动态链接中,其中有标准C的各种函数,默认情况下,linux所编译的程序中对标准C函数的链接,都是通过动态链接方式来链接libc.so.6这个函数库的。这也意味着我们在通过我们注入的.so来实现函数覆盖劫持之后需要从libc.so.6中取得原本的正常函数,让程序继续正常执行 #include #include



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required