posted @ 2019-06-16 18:58
周伯通789
阅读(3)
推荐(0)
摘要:
GCC与gcc: 初识编译器: 扩展问题: 如何理解“多语言混合开发”? 参考: 狄泰软件学院唐佐林视频教程
阅读全文
posted @ 2018-10-22 22:08
周伯通789
阅读(727)
推荐(0)
摘要:
开发环境: 工具集: 这些工具集是为了配合GCC编译器进行高效开发而设计的。 实验: test.c: func.c: g_pointer默认为空指针。 使用addr2line定位错误: 开启core dump选项就是为了记录程序崩溃的最后一刻程序的状态和寄存器的状态。 成功定位到了出错的地方。 剔除
阅读全文
posted @ 2018-10-21 22:24
周伯通789
阅读(308)
推荐(0)
摘要:
本节进行一个综合实验: write函数也属于libc库,write不是系统调用,只是系统调用的一个封装。 打印函数直接使用sys_write这个系统调用。系统调用编号为4。 退出函数直接使用sys_exit这个系统调用。系统调用编号为1。 链接脚本: 代码段的起始地址在0x08048000的基础上加
阅读全文
posted @ 2018-10-21 21:36
周伯通789
阅读(220)
推荐(0)
摘要:
思考: 链接器根据什么原则完成具体的链接工作? 入口函数是可配置的?那么其他的原则是不是也可以配置呢? 假设是可以配置的,那么必然的存在一个配置文件,在这个文件中可以配置各种各样的原则。这个配置文件就是链接脚本。 链接脚本里面就写了链接原则(如何链接各个段,如何重定位)。 上图指定了代码段的起始地址
阅读全文
posted @ 2018-10-21 20:21
周伯通789
阅读(260)
推荐(0)
摘要:
链接器在合并各个目标文件中的段时需要将标识符的最终地址给确定了。这就是重定位的过程(确定各个段的最终起始地址以及各个标识符的地址)。 示例: test.c如下: func.c如下: 编译func.c,并查看符号信息: 可以看到func这个标识符相对于代码段的偏移位置为0。 g_pointer前面有一
阅读全文
posted @ 2018-10-21 19:07
周伯通789
阅读(287)
推荐(0)
摘要:
程序的构成:从操作系统的角度来看 文件头记录了与可执行文件相关的一些基本信息。 静态分析工具大多根据程序的文件头获得相关信息。 初始化的变量进入.data段,没有初始化的全局变量进入.bss段。 未初始化的变量默认为0,为了存储效率和加载效率。 没有初始化的默认为0,在程序文件中就不用存储初始值了,
阅读全文
posted @ 2018-10-20 22:42
周伯通789
阅读(381)
推荐(0)
摘要:
本节我们研究gdb更深层的用法: 数据断点: 可以根据变量的值来监视变量。 数据断点本质是硬件断点,数量有限。 watch var_name告诉gdb我们关注var_name这个变量,如果它的值被改变了,程序运行就停止。 数据断点常常配合gdb里面的内存查看命令使用。 x是检查内存数据的命令。 上图
阅读全文
posted @ 2018-10-20 13:23
周伯通789
阅读(240)
推荐(0)
摘要:
什么是GDB: GDB应用: 静态分析工具与动态分析工具: GDB启动方式: GDB启动之后会有一个交互式的命令行,可以输入GDB特定的命令让GDB去工作。 gdb test.out意思是这一次gdb启动关注的是test.out这个进程。 gdb test.out core意思是程序崩溃时产生cor
阅读全文
posted @ 2018-10-20 11:43
周伯通789
阅读(392)
推荐(0)
摘要:
处理器通过什么规则判断资源请求或者代码跳转是否合法? 数据段的访问规则:(数据段无可执行属性) 访问者权限(CPL)高于或者等于数据段权限(DPL) 请求特权级(RPL)高于或者等于数据段权限(DPL) 即(CPL <= DPL)&& (RPL <= DPL) 上面的公式没有阐述CPL和RPL的关系
阅读全文
posted @ 2018-10-13 15:22
周伯通789
阅读(338)
推荐(0)