香港生肖开奖结果

在调试器里看LINUX内核态栈溢出

添加时间:2019-03-03

准备好GDB后,在目的机中按Alt + PrtScr + g触发其中断到调试器,片刻之后,GDB中收到消息,执行bt命令观察执行官过程。

图灵最先发明了栈,但不给它取名字。德国人鲍尔也“发明”了栈,取名叫酒窖。澳大利亚人汉布林也“发现”了栈,取名叫弹夹。1959年,戴克斯特拉在度假时想到了Stack这个名字,后来被广泛利用。

栈是流动性很大的一个常设空间,每次想到栈,我都不禁得想起那部经典的电影——《新龙门客栈》,茫茫大漠之中,孤零零的一座客栈,不同身份的客人从不同方向,带着不同的目标,在这里相遇,可能是姻缘邂逅,可能是狭路相逢,也可能是千里追杀......

闲言打住 ,今天先说说LINUX内核态栈溢出。

多少年前曾经开笔写了一本书,叫《栈优势波》,可惜只实现了5章,便搁置在那里了。

简单说来,每个个别线程个别都有两个栈,一个位于用户空间,供在用户空间执行时应用,另一个位于内核空间,供这个线程履行系统调用、掉入陷阱或者当CPU在实行这个线程时遇到中断时用。

软件世界的栈也很忙碌,也很变幻莫测,也很危机四伏,也很有故事。

启动一个Ubuntu作为调试目标,再启动一个Ubuntu作为调试主机。在主机上启动GDB,开始双机内核调试。(详细过程可能参阅高端调试网站的文章)

因为体系中每个进程都有一个用户空间,然而内核空间只有一个,所以内核空间的栈一般都是比较小的。对LINUX内核来说,更是这样。多大呢?32位时是8KB,64位时是16KB。

今天的CPU跟软件都是基于所谓的栈架构的,CPU运行时,几乎每时每刻都是离不开栈的。

上图中的栈回溯比拟完美地展示了LINUX内核处理中止的过程,特别地,这一次是在处置键盘中断,也就是咱们刚才按下的中断热键。