编译原理
国境之南Fantasy
Coder
展开
-
编译原理中的正则表达式、NFA和DFA
from : http://blog.csdn.net/betabin/article/details/8057787正则表达式,接触得已经不少,各种语言都会有些正则表达式的库来增强字符串处理功能,这里就编译原理的词法分析要用到的内容浅析下下。嗯,我很懒……还是课件截图:这里用递归定义来定义正则的,原因是简洁方便,方便以后进一步学习,比如NFA。如果转载 2012-10-13 00:41:25 · 7038 阅读 · 0 评论 -
linux中ELF加载过程分析
运行环境:*Ubuntu 14.04 LTS x64gcc 4.9.2gdb 7.8vim 7.4 with vundle过程分析分析说明在进行详细的分析之前,首先我们来总结一下Linux内核装载执行ELF程序的大概过程: - 首先在用户层面,shell进行会调用fork()系统调用创建一个新进程 - 新进程调用execve()系统调用执行制定的ELF文件转载 2016-11-21 18:23:40 · 3250 阅读 · 0 评论 -
Linux 依赖动态库 / 静态库的动态态库 / 静态库
、 依赖动态库的动态库libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而main.exe又调用了libfun.so的函数int nothing()。 下面两种方式都能工作:1> 常用的方式g++ -shared -fPIC -o libtest.so tes转载 2016-11-15 12:44:43 · 1013 阅读 · 0 评论 -
Linux 内核 Makefile 体系简单分析
众所周知,Linux内核是使用make命令来配置并编译的,那必然少不了Makefile。在内核目录树中我们可以看到内核编译系统的顶层Makefile文件。但是如此复杂、庞大的内核源码绝不可能使用一个或几个Makefile文件来完成配置编译,而是需要一套同样复杂、庞大,且为Linux内核定制的Makefile系统。她可以说是内核的一个子系统,是内核中比较特殊的一部分,几乎都是应用层的程序和脚本,但又转载 2016-11-12 21:27:40 · 492 阅读 · 0 评论 -
Linux内核模块的编译基础知识
关于linux内核驱动的东西网络上有很多,但网上的东西还是感觉有点笼统,读过之后就忘了,还是需要写下来,或者写到本子上,自己形成一个概念好一些。读了这本书上的东西,把觉得好的东西写下来,已备不时之用,也强化记忆。1 内核模块的概念介绍内核模块的同时,也说明一下和应用程序的区别。虽然内容很多,但觉得都很有用。1、内核模块是一些可以让操作系统内核在需要时载入和执行的代码,同时在转载 2016-11-12 15:41:50 · 512 阅读 · 0 评论 -
内核模块编译
一.Linux内核介绍 1.Linux 内核很庞大,相应的包含的组件也非常多。Linux文件就是常说的zImage和bzImage,在内核启动期间会被解压到内存。2.新的使用组件的思路:动态加载和卸载。也就是需要这个组件的时候才去加载,不需要的时候,就卸载。即内核模块机制。3.关于内核模块。有以下特征: (1)不被编译进内核文件 (2)可以动态加载和卸载4.关于内核模块的操转载 2016-11-12 15:31:55 · 762 阅读 · 0 评论 -
可执行文件(ELF)格式的理解
ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用。可以说,ELF是构成众多xNIX系统的基础之一,所以作为嵌入式Linux系统乃至内核驱动程序开发人转载 2016-01-11 14:06:34 · 1288 阅读 · 0 评论 -
ELF文件中section与segment的区别
1. ELF中的section主要提供给Linker使用, 而segment提供给Loader用,Linker需要关心.text, .rel.text, .data, .rodata等等,关键是Linker需要做relocation。而Loader只需要知道Read/Write/Execute的属性。a.out格式没有这种区分。(注意现在使用gcc编译出来的a.out文件只是取该名字而已,文件格式转载 2016-01-11 14:09:19 · 1836 阅读 · 0 评论 -
CentOS 6.4 编译安装LLVM3.3,Clang和Libc++
本来最新版的已经是3.4了,不过,之前编译过一次,失败了,所以这次先用3.3吧另外这是转载的文章http://www.cnblogs.com/codemood/p/3142848.html LLVM的最新版本3.3终于在6月17日发布了,按之前的计划6月5日就应该发布了,不过毕竟没有太晚,赶在VS2013 preview(6月26日微软Build大会)之前出来了。加转载 2016-01-24 22:21:30 · 558 阅读 · 0 评论 -
编译和链接
2.1 被隐藏了的过程 C语句的经典,“Hello World”程序几乎是每个程序员闭着眼睛都能写出的,编译运行一气呵成,基本成了程序入门和开发环境测试的默认标准。#include int main(){ printf("Hello World\n"); return 0; 在Linux下,我们用GCC来编译该程序时,只需使用简单的命令(转载 2014-07-01 11:53:57 · 5429 阅读 · 0 评论 -
编译器后端,寄存器分配算法
寄存器分配,是通过将程序变量尽可能地分配到寄存器,从而提高程序执行速度的一种方法。寄存器是编译器优化中最为重要的问题之一(好的寄存器分配能够提高程序执行速度超过250%);也是编译器理论中最热点的研究领域之一(研究界已经提出来大量寄存器分配相关的算法)。1. 图着色(graph coloring)方法是解决寄存器分配问题最常用的方法。 利用相交图(interferenc转载 2017-01-19 10:40:03 · 4344 阅读 · 0 评论