一.

1.函数调用差别

X64的函数调用,和X86函数调用区别,在于参数的传递不一样了,X64的参数传递不在依靠栈来传,而是寄存器,不过还是具有局限性的

比如只能允许六个寄存器来传,分别是RDI,RSI,RDX,RCX,R8,R9,参数顺序和这个寄存器顺序一样,这样就跳出了栈帧的概念的,也就是意味着

rbp直接退休了,因为查参数,不需要再靠RBP+16来查了,直接通过RSP来查找,十分的方便,不过超出6个参数传递时,还是要通过栈来传递

多余的参数,不过是用RSP来访问的,比如这张图

返回值还是存到RAX里面去的。

2.一些寄存器的保护现场的不同

因为都是通过寄存器来访问,导致反汇编出来的代码也比较短,执行效率的也更加的高

二.链接器原理

只有可重定位的目标文件(.o)需要去链接,因为一个.o文件相当于是一个模块,需要去链接成一个可执行文件

链接的原理其实也很简单,就是将节进行合并,并修改相应的逻辑地址,同时节头表里面存着映射关系,可执行文件由于不知道物理地址在哪

所以都会先放到虚拟地址来看,所以就需要一个映射关系表,将可执行文件中的节映射成虚拟地址中的段。

所以我们使用调试器的时候,都是从0x0000-0xffff....,都是虚拟地址,而虚拟地址怎么转换成物理地址,这里暂时就不讨论。。。忘了。。

三.可重定位文件.o

就是.c文件进行预处理,编译,汇编形成的可重定位文件,需要进行连接,才可以生成可执行文件,都是由一个一个节构成,不过还有一个文件头包含了映射信息和文件管理的东西,估计要另外开一篇博客学习

南京大学计算机基础 X64函数调用和链接器原理和可重定位的文件.o的更多相关文章

  1. 【图片+代码】:GCC 链接过程中的【重定位】过程分析

    作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...

  2. 南京大学计算机基础 ELF和可执行文件格式

    1.可重定位目标文件格式 主要是由ELF头,一些节比如.text节,.rodata节,.data节,.bss节等,前面是只读的,后面是可读可写的,加上一个节头表 1.1 ELF头里面主要包含了16字节 ...

  3. [CSAPP-II] 链接[符号解析和重定位] 静态链接 动态链接 动态链接接口

    1 平台 转http://blog.csdn.net/misskissc/article/details/43063419 1.1 硬件 Table 1. 硬件(lscpu) Architecture ...

  4. 链接器(linker)的作用——CSAPP第7章读书笔记

    首先说说我为什么要去读这一章.这个学期开OS的课,在Morden Operating System上读到和Process有关的内容时看到这样一句话:“Process is fundamentally ...

  5. C编译器、链接器、加载器详解

    摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代 ...

  6. C++链接器

    链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件 在链接过程中,它必须把符号(变量名.函数名等一些列标识符)用对应的数据的内存地址(变量地址.函数地址等)替代,以完成程 ...

  7. linux 下动态链接实现原理

    符号重定位 讲动态链接之前,得先说说符号重定位. c/c++ 程序的编译是以文件为单位进行的,因此每个 c/cpp 文件也叫作一个编译单元(translation unit), 源文件先是被编译成一个 ...

  8. C入门语言基础一[可移植性、涉及的三种文件、编程7个步骤、编译器、链接器]

    Review Questions What dose portability mean in the context of programming? 文中讲到的可移植性是什么意思?   C本身是不涉及 ...

  9. Linux学习-计算机基础

    Linux 学习-计算机基础 一.描述计算机的组成及其功能. 计算机系统是由硬件(Hardware)和软件(Software )两部分组成. 硬件: 从硬件基本结构上来讲,计算机是由运算器.控制器.存 ...

随机推荐

  1. python使用多线程备份数据库

    前言:在日常服务器运维工作中,备份数据库是必不可少的,刚工作那会看到公司都是用shell脚本循环备份数据库,到现在自己学习python语言后,利用多进程多线程相关技术来实现并行备份数据库,充分利用服务 ...

  2. Sqlserver语句获取本周、上一周、本月数据

    sql语句获取本周.上一周.本月数据 获取周数据 1 本周 2 select * from table1 where datediff(week,时间字段,getdate()) = 0 3 上周 4 ...

  3. Echarts的柱状统计图出现x轴统计时间出现间隔显示的问题

    今天在使用Echarts的柱状统计图出现x轴统计时间出现间隔显示的问题: 数据都拿到了,放到Json数组都是完整的, 展现是时候 如下图:

  4. MindSpore网络模型类

    MindSpore网络模型类 Q:使用MindSpore进行模型训练时,CTCLoss的输入参数有四个:inputs, labels_indices, labels_values, sequence_ ...

  5. CUDA运行时 Runtime(一)

    CUDA运行时 Runtime(一)             一. 概述 运行时在cudart库中实现,该库通过静态方式链接到应用程序库cudart.lib和libcudart.a,或动态通过cuda ...

  6. python路径写入注册表,导入三方模块win32

    python在安装第三方模块时候,需要将python的路径写入注册表,否则会提示 'python version 3.8-32 required,which was not found in the ...

  7. 《python网络数据采集》笔记2

    1.网页表单与登陆窗口 Requests 库擅长处理那些复杂的 HTTP 请求.cookie.header(响应头和请求头)等内容. 1)表单提交 import requests #字段 params ...

  8. Linux学习笔记:linux命令之目录处理命令

    目录处理命令 ls 命令名称:ls 英文原意:list 执行权限:所有用户 功能:显示目录文件 语法:ls 选项[-ald] [文件或目录] -a:显示所有文件,包括隐藏文件 -l:详细信息显示 -d ...

  9. Spring Cloud02:Eureka Server注册中心

    一.Eureka是什么 Eureka是Netflix开源的基于REST的服务治理方案,Spring Cloud集成了Eureka,提供服务治理和服务发现功能,可以和基于Spring Boot搭建的微服 ...

  10. mybatis学习——使用注解开发

    前言: 一个语句既可以通过 XML 定义,也可以通过注解定义.不过,由于 Java 注解的一些限制以及某些 MyBatis 映射的复杂性,要使用大多数高级映射(比如:嵌套联合映射),仍然需要使用 XM ...