Visual Studio Code 挺好用的

我在 macOS 上要开发一些简单的 C/C++, 不想要完备的 IDE, 一个编辑器就很方便。

可是我还想要一些有用的开发插件例如智能代码提示、智能引用、快捷键构建之类。
这些功能其实任何编辑器依靠广大群众的智慧也有各种好的解决方案,VCS 则是更简单就可以配置到足够好,而且免费。

Read More

这样理解 Python 闭包

看了 12 步轻松搞定 python 装饰器 里的描述后,对『closure 是上下文』有了些形象的理解,一些应用了 closure 的实践可以参考文章里的一些例子,例如函数参数定制生成,装饰器功能等

g_var = 20
def outer():
loc_var = 30
def inner():
print('I can access g_var: %s, loc_var: %s' % (g_var, loc_var))
return inner
in_fun = outer()
# 内层使用到的[外层函数的本地变量]会加入到 func 对象的 __closure__ tuple 里面
print(in_fun.__closure__)
# 全局变量不包含在 closure tuple,并不是副本
g_var = 5000
# 效果就是 in_fun 本身函数内的代码,加上 __closure__ 里的上下文副本实现了 closure 功能
in_fun()
# 也就是说 __closure__ tuple 包含一个 cell 元素,cell 装有外层的 loc_var,值是 30
print('There is %d cell inside' % len(in_fun.__closure__))
print('This cell contain %d' % in_fun.__closure__[0].cell_contents)

shellman 一个 Linux 堆溢出利用例题的分析

ALARM signal 自动退出程序

首先把玩一下,发现有个 alarm 事件令程序在一分钟后退出,这里在二进制修改一下时间值去掉这个小玩意,并不会影响后续堆溢出的分析。

时间值在 main 函数上作为立即数传给 alarm,用 IDA 或别的反汇编工具可以看到
一时间没有好用的二进制编辑,发现用 vi 也非常方便
https://www.zhihu.com/question/22281280/answer/34778466

ALARM signal 时长

之后的动态分析会用这个修改过的 shellman_noalarm 就不会一分钟后退出,看了网上一些介绍 gdb 可以屏蔽 ALARM signal, 也是可行方法吧。

Read More

理解 TCP 的三次握手、四次挥手

三次握手是这样

第一次(客户端 to 服务端):我想建立连接,你听到吗?
如果服务端收到第一次握手的请求后,则可以确认:[客户端 to 服务端] 是畅通的。
客户端还不知道任何是否畅通的情况

第二次(服务端 to 客户端):我收到你的请求了,可以建立连接啊,你听得到吗?
此时,服务端可以确认的事情是:[客户端 to 服务端] 是畅通的。
客户端如果收到第二次握手的服务端回复后,则可以确认 [客户端 to 服务端], [服务端 to 客户端] 都是畅通的。

第三次(客户端 to 服务端):我听到你说可以建立连接了。
上面已经确认了[客户端 to 服务端] 是畅通的,这个包不会有问题。
此时如果服务端收到确认后,知道的事情有:[客户端 to 服务端],[服务端 to 客户端] 都是畅通,
而客户端也知道 [客户端 to 服务端], [服务端 to 客户端] 都是畅通。

好的,三次握手确认了双方畅通。

Read More