gohook 一个支持运行时替换 golang 函数的库实现
摘要:运行时替换函数对 golang 这类静态语言来说并不是件容易的事情,语言层面的不支持导致只能从机器码层面做些奇怪 hack,往往艰难,但如能成功,那挣脱牢笼带来的成就感,想想就让人兴奋。 gohook gohook 实现了对函数的暴力拦截,无论是普通函数,还是成员函数都可以强行拦截替换,并支持回调原
阅读全文
posted @
2019-06-04 15:10
twoon
阅读(11465)
推荐(2) 编辑
左值右值的一点总结
摘要:再次来写左值右值相关的东西我的内心是十分惴惴不安的,一来这些相关的概念十分不好理解,二来网上相关的文章实在太多了,多少人一看这类题目便大摇其头,三来也怕说不清反而误导了别人,反复纠缠这些似乎无关大雅的语言细节实在也有成为 language lawyer 之嫌。但我还是决定再总结一次,因为这是我一直以
阅读全文
posted @
2015-12-11 16:50
twoon
阅读(7012)
推荐(2) 编辑
模板中的名字查找问题
摘要:问题起源 先看下面很简单的一小段程序。 这段代码在 GCC 下很意外地编译不过,原因竟然是找不到 fun 的定义,可是明明就定义在基类中了好吗!为什么视而不见呢?显然这和编译器对名字的查找方式有关,那这里面究竟有什么玄机呢?上述代码是写得不规范,还是 GCC 竟然存在这样愚蠢而又莫名其妙的 bug...
阅读全文
posted @
2014-06-15 16:29
twoon
阅读(1994)
推荐(0) 编辑
基于ε-NFA的正则表达式引擎
摘要:正则表达式几乎每个程序员都会用到,对于这么常见的一个语言,有没有想过怎么去实现一个呢?乍一想,也许觉得困难,实际上实现一个正则表达式的引擎并没有想像中的复杂,《编译原理》一书中有一章专门讲解了怎么基于状态机来构建基本的正则表达式引擎,它讲这个初衷是为词法分析服务,不过书里的东西相对偏理论了些,实现起...
阅读全文
posted @
2014-05-17 20:03
twoon
阅读(9311)
推荐(1) 编辑
c++ 异常处理(2)
摘要:前面一篇博文简单介绍了 c++ 异常处理的流程,但在一些细节上一带而过了,比如,_Unwind_RaiseException 是怎样重建函数现场的,Personality routine 是怎样清理栈上变量的等,这些细节涉及到很多与语言层面无关的东西,本文尝试介绍一下这些细节的具体实现。 相关的数据
阅读全文
posted @
2014-04-07 21:57
twoon
阅读(10863)
推荐(8) 编辑
c++ 异常处理(1)
摘要:异常 (exception) 是 c++ 中新增的一个特性,它提供了一种新的方式来结构化地处理错误,使得程序可以很方便地把异常处理与出错的程序分离,而且在使用上,它语法相当地简洁,以至于会让人错觉觉得它底层的实现也应该很简单,但事实上并不是这样。恰恰因为它语法上的简单没有规定过多细节,从而留给了编译
阅读全文
posted @
2014-03-19 22:08
twoon
阅读(25522)
推荐(5) 编辑
说说尾递归
摘要:微博上看到有人在讨论尾递归,想起以前曾看过老赵写的一篇相关的博客,介绍的比较详细了,相信很多人都看过,我也在下面留了言,但挑了个刺,表示文章在关键点上一带而过了,老赵自然是懂的,但看的人如果不深入思考,未必真正的明白,下面我说说我的理解。什么是尾递归什么是尾递归呢?(tail recursion),...
阅读全文
posted @
2013-12-28 16:35
twoon
阅读(27972)
推荐(21) 编辑
[译] 玩转ptrace (一)
摘要:[本文翻译自这里:http://www.linuxjournal.com/article/6100?page=0,0,作者:Pradeep Padaia]你是否曾经想过怎样才能拦截系统调用?你是否曾经想过通过修改一下系统调用的参数来耍一把内核?你是否想过调试器是怎样把一个进程停下来,然后把控制权转移...
阅读全文
posted @
2013-12-16 21:44
twoon
阅读(25094)
推荐(1) 编辑
正则表达式的基本用法
摘要:Perl 有很多其它语言所没有的特性,这其中对正则表达式(regular expression)的强大支持是它最为突出的一个亮点。正则表达式使得 perl 在处理文本时具有非常强大的优势:快速,灵活而且很可靠,甚至可以说,强大文本处理能力,是 perl 在众多语言中最为闪耀的一个特点。 因此学习 p...
阅读全文
posted @
2013-05-25 17:00
twoon
阅读(30114)
推荐(0) 编辑