PWN(1)_编译原理(一)

编译器的具体作用:
在这里插入图片描述
一个源文件(.c)在编译器经过编译和链接两个大的过程而生成可执行文件(.exe),而编译又分为分为三个阶段:预处理(预编译)、编译、汇编,这是一个翻译的过程。而可执行文件生成在运行环境可以直接运行。
首先在Ubuntu上面安装gcc编译器:
在这里插入图片描述
查看gcc版本为5.0.4
创建一个hello.c文件
在这里插入图片描述
然后编写一个hello world的c文件:
在这里插入图片描述
然后将其编译为可执行文件:
在这里插入图片描述
在刚开始的时候遇到了这样的报错,多尝试几次即可
然后输入命令开始即可
至此,就在Linux系统中完成了最简单的文件反编译

什么是合并段表和合并符号表,sum.c是另一个源文件,里边的内容是Add函数的声明,它只有一个符号表(Add)

在这里插入图片描述
词法分析
词法分析是编译的第一步,主要任务是读入源程序的输入字符(将代码一个字符一个字符的读入),将其组成词素(一个字符序列),生成并输出一个词法单元序列。由于负责读取程序源码,它还有一些其他任务。如:过滤程序中的注释和空白(合并空格,删除换行符、制表符等);将编译器生成的错误消息与源程序的位置联系起来(给错误赋予行号)。具体如下图所示:
在这里插入图片描述
词法分析使用正则表达式来表示一个匹配模式,然后根据各个需要识别的词法单元的匹配模式来构造出代码。在这其中首先要构造出状态转换图,使得词法分析器在扫描输入串的过程中寻找和某个模式匹配的元素,然后根据一组状态转移图构造出一个词法分析器。
如果在状态0时看到“=”,那么直接从状态5返回信息,如果看到“<”表明进入状态1,然后继续往下扫描。如果没有看到“<”“=”“>”,表明此处没有relop的词素,该状态图不会使用。
这只是手工将正则表达式转成状态转移图,词法分析器生成工具Lex使用不确定的/确定的有穷自动机根据一组正则表达式集合构造出状态转移图。

词法分析器一般产生如下格式词法单元:
在这里插入图片描述
其中token-name表示词法分析过程中的抽象符号,类似于为该词法单元赋予唯一id,而attribute-value指向存储词法单元相关信息的符号表中的某一条。如前图的赋值语句,这条词法语句中的词素将会被映射成如下词法单元,用于下一阶段的语法分析。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值