180101 逆向-64位处理器
1625-5 王子昂 总结《2018年1月1日》 【连续第458天总结】
A. x64处理器
B.
64位系统中内存地址为64位(8个字节),使用64位大小的指针。所以含有绝对地址的指令大小也比原来增加了4个字节。同样,寄存器的大小和栈的基本单位也变为64位。
虚拟内存的实际大小为16TB
虽然用64位数可以表示的最大数为16EB,但考虑到实际性能,x64和IA-64CPU都不支持这么大的虚拟内存(因为会导致巨大的系统开销耗费在内存管理上)
通用寄存器
新增了R8-R15,8个寄存器
64位本地模式中不再使用段寄存器:CS、DS、ES、SS、FS、GS,段寄存器仅用于向下兼容32位程序
Call/Jmp指令
32位的x86系统中,FF15 XXXXXXXX用于call绝对地址
但在64位中,由于指令地址增加到了8个字节,因此FF15如果仍用于call绝对地址那么后面也应该改为8个字节
为了避免增加指令长度,64位中的FF15 XXXXXXXX用于call相对地址
调用约定
这是一个巨大的变化
调用约定规定了函数调用时参数存放的位置和调用结束时哪方负责清理堆栈
32位程序中使用的调用约定包括cdecl、stdcall、fastcall等几种
但在64位程序中,统一为一种变形的fastcall
传参方式依次为
RCX、RDX、R8、R9、栈
调用结束后由调用方
负责清理
另外虽然这4个参数通过寄存器传入,但栈中仍然为它们保留了空间
栈帧
64位中栈的大小会比实际需要的大小大得多
调用子函数时,不再使用PUSH命令来传参,而是用MOV指令操作寄存器与预定的栈来传递
并且创建栈帧时也不再使用RBP寄存器,而是直接使用RSP寄存器来实现
在64位中不再用
push ebp
mov ebp, esp
sub esp, xxx
...
leave
/
add esp, xxx
pop ebp
的方式来创建栈帧,而是直接
sub esp, xxx
...
add esp, xxx
另外由于调用子函数时参数是直接mov到栈中,因此在子函数中也直接使用栈,而不用通过ebp来使用参数
好处是调用子函数时不需要改变栈指针RSP,返回时也不需要清理栈指针,能够大幅提升程序的运行速度
C. 明日计划
看书
180101 逆向-64位处理器相关推荐
- 树莓派第三代跨越发展,采用64位处理器内建WiFi及蓝牙
Raspberry Pi(树莓派)前不久在Raspberry Pi Foundation基金会成立四周年纪念日之际对外发布了新产品Model 3,其定价仍然在35美元(30英镑),和上一版Raspbe ...
- 64位处理器_电脑系统32位好还是64位好 哪个快?
1.运算速度不同.电脑CPU运算使用的是二进位制,O和1,一个O或一个1叫一位,8个位组成一个字节,2个字节组成一个标准汉字,处理的位数越高,表明其运算速度越快.通常我们说的64位32位是指的处理器( ...
- 64位处理器_快看看你的电脑是64位还是32位操作系统,处理器支持64位可升级
昨天把系统又重装了一下,猛然发现,我的电脑可以装64位操作系统,而我一直用的是32位操作系统,因为几年前,64位操作系统缺乏驱动,市面上的软件在32位操作系统兼容性好,而这几年,硬件配置的提高,64位 ...
- C语言变量长度在32位和64位处理器上的关系
C语言变量长度在32位和64位处理器上的关系 理论上来讲 我觉得数据类型的字节数应该是由CPU决定的,但是实际上主要由编译器决定(占多少位由编译器在编译期间说了算). 常用数据类型对应字节数 ...
- 64位处理器 计算机,32位与64位的处理器有什么区别?
处理器的两个主要类别是32位和64位.计算机拥有的处理器类型不仅会影响其整体性能,还可以决定其使用哪种软件. 32位处理器 直到1990年代初,32位处理器都是所有计算机中使用的主要处理器.Intel ...
- 64位处理器_32位和64位的Windows 10和处理器(CPU)有什么区别
当你下载Windows 10.Office或任何其他软件时,可能会注意到有32位和64位版本可用,这时你可能会想到一个问题,我需要哪个? 在本文中,你可以了解32位和64位Windows 10之间的区 ...
- 华为首款64位处理器手机跑分曝光
安兔兔评测跑分产品库中出现了代号为"Che2-TL00"的机型,这和此前工信部通过认证的型号一致,这款手机就是即将发布的华为荣耀新机.从安兔兔的后台数据库中我们发现,这将是华为首款 ...
- 64位处理器_CAD安装包32位跟64位有什么区别吗?
我们看到随着64位CPU和操作系统的出现,AUTOCAD的安装包也分为32位版本和64位版本,32位和64位版本有什么区别呢?应该怎么选择呢? 选择32位还是64位的CAD首先要取决于你的操作系统,你 ...
- Android的.so文件,32位处理器与64位处理器
一.ABI 是什么 ABI 是 Application Binary Interface 的缩写. 不同 Android 手机使用不同的 CPU,因此支持不同的指令集.CPU 与指令集的每种组合都有其 ...
最新文章
- 从Python到AI,这条路好走吗?
- php7与php5的区别,PHP7和PHP5区别
- pragma pack(1) and #pragma pack(push,1)
- ActiveMQ的network connectors部署集群(七)
- linux系统嵌入式编译环境,Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解...
- wed6699整站程序下载【首发】
- 从C/C++零基础到月入9K我用了9个月
- oracle存储怎么调试tord,接口_数据交换应用指导(20页)-原创力文档
- ios调用系统的短信和发送邮件功能,实现短信分享邮件分享
- sizeof和strlen区别
- 计算机系统及原理pdf,计算机系统及工作原理教学设计.pdf
- Py之Scipy:Scipy库(高级科学计算库)的简介、安装、使用方法之详细攻略
- 微弱信号检测_移动电话/手机信号增强器/扩大器
- 【税务硕士论文】跨国公司无形资产转让定价税制改革探究(节选)
- 解决Win2016提示 “发生身份验证错误 要求的函数不受支持“的问题
- android客户端与服务器端交互 如何保持session
- MySQL info是什么意思_info是什么意思?info文件夹是干什么...
- Matlab中format rat的意思(补充说明format函数用法)
- 【SQL】sqlzoo练习题Scottish Parliament
- android动态图片适配,Android适配利用webview加载后图片显示过大的问题解决
热门文章
- 【深圳VS台湾】真正的无人驾驶还要等75年?在台湾已运行大半年(附台湾和深圳无人驾驶公交对比表)...
- 25 匹马,5 个赛道,没有计时器,请问最低多少次可以找出跑得最快的 3匹马
- 日本准备推行AI婚配,年轻人会为“爱情算法”买单吗?
- k30pro杀进程严重怎么解决_狗狗总是不吃饭,严重挑食怎么办?学会这三招,快速解决不吃饭...
- 如何由一名合格的电商运营过渡到电商运营总监角色
- kubeadm修改默认证书有效期,解决证书过期问题
- 整数拆分问题的四种解法
- 面向搜索引擎的隐蔽式SEO木马---之查杀再现笔记
- uoni扫地机器人好用吗_日本扫地机器人好用吗?看完这篇再买也不迟
- 微型计算机更新换代标致,实拍标致408十周年版 新增全液晶仪表盘