摘要: Elf的文件格式细节[1]细节[2]细节[3]Elf的文件格式我实现的简单C链接器,MiniLinker下载:git clone git@github.com:youzhonghui/MiniLinker.git在windows或者在linux上的可执行文件,除了记录了程序运行需要的指令和数据以外,还需要提供一些载入的信息。比如文件中那个部分是指令,那个部分是数据等等。windows下的可执行文件是PE格式,linux下的则是Elf格式。Elf格式在文件上是这个样子的:对于Elf文件格式的解析,在《程序员的自我修养》里写的很清楚了,我就不再重复。记录一些对写链接器必要而书中没有涉及的东西。当然 阅读全文
posted @ 2013-08-06 11:13 南树 阅读(751) 评论(1) 推荐(0) 编辑
摘要: 32位未修改源码与修改版的代码下载:git clone git@github.com:youzhonghui/MiniCRT.gitMiniCRT 64位 linux 系统移植记录MiniCRT是《程序员的自我修养:链接,转载于库》的作者俞甲子写的小型的C运行时库。里面提供了printf,malloc,free,fopen等比较常用的函数实现。之所以要捣鼓这个东西,是因为要自己写一个链接器,链接标准库的时候出了麻烦,一些符号在整个libc中都找不到定义,标准库又太大,研究源码,翻文档都不方便,不如拿一个小巧可用的MiniCRT过来,源码在手,知根知底。但是也不是一帆风顺,我现在用的系统是64位 阅读全文
posted @ 2013-08-04 15:38 南树 阅读(1884) 评论(0) 推荐(0) 编辑
摘要: 为什么要研究链接器? 于我来说,最主要的原因就是学习了。 去年差不多这个时候,我刚进入大学的计算机系,对于如何学习这个专业尚模糊不清。在开学一个月左右的时候,学院为了探索教学改革,要组建一个虚拟的试验班,让一个老师给我们做了一次宣讲(当时没想到这个老师就是给我重大影响的韩老师)。他先说了一些他所遇见的大牛的例子,这些大牛的共同特征就是基础特别好,对于计算机系统的底层非常了解。所以学院希望通过这个试验班,做一些教学方面的探索,看能不能培养出基础扎实的,更优秀的学生。还抛出了三个愿望:操作系统,编译器,数据库,希望我们走一遍,不仅知道他们的运行机制,还要能够动手实践出一个简单可用的版本。 对... 阅读全文
posted @ 2013-08-02 01:29 南树 阅读(1376) 评论(1) 推荐(0) 编辑
摘要: 久闻版本控制软件的大名,但是一直不了解版本控制软件的杰出之处。原来建过github账号但是当网盘来使,用过TortoiseSVN是因为sae部署博客的需要。现在需要团队协作完成任务了,认真研究了一下svn。下面是入门指南,最后有svn相关的链接。为什么需要使用版本控制软件?多人协作一起写代码的时候,需要相互共享代码。使用SVN通常是指定一台机器为服务端,建立一个代码仓库。每个组里的成员在完成了自己的代码以后,向服务端提交(commit),服务端更新文件,但是不会把旧的文件删除,而是通过某种方式保存下来,其他机子能够通过服务端同步到最新的代码。同时每一次提交,都会产生一个新的版本号,客户端可以向 阅读全文
posted @ 2013-04-20 00:05 南树 阅读(2108) 评论(2) 推荐(0) 编辑
摘要: 这是一篇周记,原文是发在我的独立博客上:http://1.nanshu.sinaapp.com/?p=1042013/4/14 前两天捣鼓工作环境。最后效果如图: 上面不是一机双屏,左边的显示屏是我笔记本的输出,右边的显示屏是台式机的输出。我平时习惯用emacs做记录。现在有一个台式机和一台笔记本,文件的同步就是问题。如果我台式机和笔记本同时使用,并且只在笔记本上用emcas和一些文件,就不存在文件的同步问题,但是要笔记本的键盘鼠标和台式机键盘鼠标来回切换,相当麻烦。我想应该能够通过两台机子组成局域网,来实现共享鼠标键盘的,上网查查,找到一个软件叫synergy,而且是跨平台的。很兴奋,捣.. 阅读全文
posted @ 2013-04-14 23:02 南树 阅读(2550) 评论(2) 推荐(1) 编辑
摘要: 用wordpress搭了一个个人博客。地址:http://nanshu.sinaapp.com/博客园的博文是我博客的技术部分,在写技术博文的时候会同时贴到这里和上面的个人博客中。当然个人博客中还会有非技术的部分。 阅读全文
posted @ 2013-03-17 10:57 南树 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 寒假断断续续写这个大概有小半个月了,过个年耽误了几天。 这两天清理了一些bug,整理了代码,打算发出来。 Observer是基于微软的detour3.0写的。 适用对象,c/c++编写成的exe文件(需要生成map文件) 下载Observer地址:http://pan.baidu.com/share/link?shareid=281171&uk=2133448544 下载源码... 阅读全文
posted @ 2013-02-18 15:15 南树 阅读(1139) 评论(1) 推荐(0) 编辑
摘要: 我曾经自学过C++,现在回想起来,当时是什么都不懂。说不上能使用C++,倒是被C++牵着鼻子走了。高中搞NOIP并不允许使用STL库,比赛中C++面向对象的机制基本没有什么用武之地,所以高中搞NOIP名为用C++,其实就是c加上了cout和cin。 前几天看韩老师的《老码识途》,里面记录了一些C++面向对象机制的探索,又勾起了我的兴趣。而这个学期自学了汇编,又给了我自己动手探索提供了能力基础,自己上手以后,从一个更加底层的视角看C++机制的实现,让我在黑暗中摸到了驯服C++的缰绳。引用:本质上是指针,这一点即使大家没有看反汇编应该也是猜到了。对象在内存上的布局: 1: class Fat... 阅读全文
posted @ 2013-02-03 20:25 南树 阅读(2321) 评论(8) 推荐(8) 编辑
摘要: 看了detour的原理,心里想着自己能不能动手模拟一个。比划的时候发现了一些细节问题。detour将函数的前几个字节(刚开始看文档的时候说5个字节)替换成jmp __。但是发生机器码截断整么办?可以在vs的反汇编窗口看到每条汇编指令的机器码,每条指令的机器码长度并不是固定的,我想detour并不是固定复制5个字节这么简单(目前还没研究detour源码)。所以退而求其次(这是一个学习性质的实验),改变设计。我选择在自己定义的函数执行完之后将修改的代码再改回去,跳回原函数运行。看起来是这样的:而且自定义函数是不知道自己返回到的是traceBack的。即原函数总是会被执行。这就变成了钩子,而且只能钩 阅读全文
posted @ 2013-01-31 14:36 南树 阅读(1502) 评论(5) 推荐(1) 编辑
摘要: 在看韩老师的书《老码识途》。其中一章讲异常机制的实现探究。自己上手,先模拟一个。实现的功能比较简单。关键函数:try_()catch_( hdFunc handle )finally_( hdFunc handle )throw_( char *msg )end_()ps: typedef void (*hdFunc)( char *msg )可以看到只能跑出一种错误类型,抛出一个字符串。catch_()和finally_()必须在紧接在try_()后面调用。原理就是用栈,每次catch_()和finally_()都会压栈。throw_则出栈,会调用所有的finally,但只会调用离栈顶最进的 阅读全文
posted @ 2013-01-29 12:01 南树 阅读(525) 评论(0) 推荐(0) 编辑