CS:APP 栈溢出实验解析

本学期学习了CS:APP(深入理解计算机系统)这门课。随课做了相关的实验。这里把实验的过程与大家分享。

这是第三章的栈溢出实验的解析。希望能起到帮助。

Level 0: Candle

此任务主要内容为执行流的控制。直接修改getbuf()函数的返回地址为smoke() 函数的地址即可。通过GDB知该地址固定为为0x08048c90。由此构造溢出攻击数据:

01可以替换成除了0A以外的任何字节。该数据能覆盖return address,在执行到ret语句的时候劫持控制流到0x08048c90。 继续阅读CS:APP 栈溢出实验解析

解决RabbitMQ无故占用大量内存的问题

刚刚接手自强Studio的后台开发,碰到了Redis做Celery的broker时大量占用Redis服务器宽带资源的问题。面对有限的经费,我决定把和Celery搭档的做Broker的Redis更换为RabbitMQ。

刚切换到RabbitMQ以后,流量是有显著下降,但是却发现了一个奇怪的问题:服务器内存资源占用总是从50%在两三天的时间内飙升至80%,之后服务器内存调度缓慢,几乎处于宕机的状态。

起先怀疑是服务器配置不足(服务器只有1G内存),然而在咨询了@liby、@iceboy@twd2等大神以后,得知RabbitMQ在1G的内存下跑完全可行。

在百度和必应上搜索无果。搜到的大多是关于vm_memory_high_watermark的内容。修改后无效。之后细致的分析了RabbitMQ的内存,发现高涨的是binary部分。遂修改关键词,重新选择合适的搜索引擎,搜到了这篇文章

解决方法就是,在RabbitMQ配置文件 rabbitmq.config中修改 tcp_listen_options中有关Socket Buffer的配置。该问题提供的参数如下:

未强制指定时,系统会自动指定Buffer的大小(想想一堆数据全部丢进去,着实可怕)。具体的体现就是Binary内存使用高涨。RabbitMQ的文档里没有详尽介绍这个参数,然而这个参数尽然会带来这么大的内存使用差!

修改此参数后,RabbitMQ已正常运行一个多星期。

在Debian下搭建HTTPS服务器

0x00 引言

snapshot73

HTTP协议是大致在1996年左右定型的。距今天已经大约有了20个年头。今天传统的HTTP协议正遭受着来自安全性的考验。数据的传输的过程没有想象中的那么安全,任何一个环节都可能出现数据的泄露。

HTTPS则可以看作是在HTTP的基础上加入SSL层的一种协议。SSL保证了数据传输过程的安全性,并为用户确认对方网站的身份提供了条件。

本篇主要写给希望应用HTTPS的站长,提供了一种建立HTTPS服务器的方法。

0x01 SSL证书的获取

为了保证网站的身份,SSL应用了“证书”。为了保证证书的合法性,证书需要专门的机构签发。这些机构对你的身份进行验证后给你发放证书。大多数时候这是要收费的,毕竟这个过程要一定的人力物力完成。

当然,不同的证书需要不同强度的认证,所以证书的定价也是有差异的。有一类证书只需要验证域名,这些证书大多是免费的。我的证书是由WoSign签发的。大家可以在这里申请。还有Let’s Encrypt,这也是一种免费SSL证书的解决方案。当然,企业级用户还是建议购买一个认证更强的证书,有助于提高企业的声誉。 继续阅读在Debian下搭建HTTPS服务器

四六级翻译汇总

以下均选自于每年四六级真题,供有需要的同学学习,如果内容有侵权请与我联系。

四级

2015年12月

题一

云南省的丽江古镇是中国著名的旅游目的地之一。那里的生活节奏比大多数中国的城市都要缓慢。丽江到处都是美丽的自然风光,众多的少数民族同胞提供了各式各样、丰富多彩的文化让游客体验。历史上,丽江还以“爱之城”而闻名。当地人中流传着许多关于人生,为爱而死的故事。如今,在中外游客眼中,这个古镇被视为爱情和浪漫的天堂。(paradise)

题二

今年在长沙举行了一年一度的外国人汉语演讲比赛。这项比赛证明是促进中国和世界其他地区文化交流的好方法。它为世界各地的年轻人提供了更好地了解中国的机会。来自87个国家共计126位选手聚集在湖南省省会参加了7月6日到8月5日进行的比赛和决赛。比赛并不是唯一的活动。选手们还有机会参观了中国其他地区的著名景点和历史名胜。

题三

中国父母往往过于关注孩子的学习,以至于不要他们帮忙做家务。他们对孩子的唯一要求就是努力学习,考得好,能上名牌大学。他们相信这是为孩子好,因为在中国这样竞争激烈的社会里,只有成绩好才能保证前途光明。中国父母还认为,如果孩子能在社会上取得大的成就,父母就会受到尊敬。因此,他们愿意牺牲自己的时间、爱好和兴趣,为孩子创造更好的条件。 继续阅读四六级翻译汇总

GDB小技巧

在代码的编写过程中有一环叫做调试,然而调试往往是个折腾人的过程。事实上调试也是有很多技巧可言的。这里分享几个使用GDB进行调试的技巧。

GDB是the GNU Project debugger的简称,也就是GNU的调试器。事实上诸如Dev-C++、Code::Blocks、Free Pascal IDE之类的IDE的调试功能背后都站着GDB的身影。这足以见得GDB的强大。

下面就分享几个GDB的使用技巧。

使用GDB以前,首先要生成能够被GDB识别的可执行程序。大多数编译器的这个功能可以使用-g开关打开。如,gcc可以使用如下编译命令:(-Wall -lm为推荐参数,可加可不加,g++与之类似)

FPC可以使用

做好了前期准备就可以开始搞正事了。
继续阅读GDB小技巧