当前位置:网站首页>X64基础(一)
X64基础(一)
2022-04-22 06:19:00 【Misaka10046】
寄存器
扩展
| 8位 | 16位 | 32位 | 64位 |
|---|---|---|---|
| al | ax | eax | rax |
| cl | cx | ecx | rcx |
| dl | dx | edx | rdx |
| bl | bx | ebx | rbx |
| ah | sp | esp | rsp |
| ch | bp | ebp | rbp |
| dh | si | esi | rsi |
| bh | di | edi | rdi |
新增
| 8位 | 16位 | 32位 | 64位 |
|---|---|---|---|
| r8b | r8w | r8d | r8 |
| r9b | r9w | r9d | r9 |
| r10b | r10w | r10d | r10 |
| r11b | r11w | r11d | r11 |
| r12b | r12w | r12d | r12 |
| r13b | r13w | r13d | r13 |
| r14b | r14w | r14d | r14 |
| r15b | r15w | r15d | r15 |
128位 XMM0-XMM8
64位下入栈不能使用pushad 得用push rax rcx一个个入栈
地址
32位下是四字节 64位下是八字节 但是只有48位有效
| 64-48位 | 47-0位 |
|---|---|
| 符号扩展位 要么全是0 要么全是1 | 地址 |
地址范围是0xFFFF8000 00000000 ~ 0xFFFFFFFFF FFFFFFFF跟0x00000000 00000000 ~ 0x00007FFF FFFFFFFF 中间的0x00008000 00000000 ~ 0xFFFF7FFFF FFFFFFFF 为非法的地址
但是Intel规定的是48位有效 而微软只使用了44位

寻址
X86下寻址
| 寻址形式 | 介绍 |
|---|---|
| [base] | 基址 |
| [disp32] | 偏移量 |
| [base + index] | 基址 + 变址 |
| [base + disp8/32] | 基址 + 偏移量 |
| [base + index*scale + disp8/32] | 基址 + 变址 + 偏移量 |
CALL的寻址
X86

寻址为 (B9187C + 5) + FFFFF84C = 100B910CD
X64

寻址为 (7FF7B1711888 + 5) + FFFFF903 = 7FF7B1711190
参数的寻址
X86

直接寻址
X64

寻址为(7FF7B1711881 + 7)+ 839C = 7FF7B1719C24
X64使用内联汇编
源文件中添加

编写汇编代码

设置项类型
新建一个头文件 导入汇编函数

然后就能直接用了

调用约定
X86
cdcel 参数都是从右向左通过堆栈传递 自动清理堆栈
stdcall 所有参数从右到左依次入栈 手动清理堆栈
thiscall 所有参数从右到左依次入栈 如果参数个数确定,this指针通过ecx传递给被调用者;如果参数个数不确定,this指针在所有参数压栈后被压入堆栈 对参数个数不定的,调用者清理堆栈,否则函数自己清理堆栈
fastcall 函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序压栈 手动清理堆栈
X64
类似fastcall 第一个第二个第三第四参数 放入rcx rdx r8 r9

版权声明
本文为[Misaka10046]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Misaka10046/article/details/124212214
边栏推荐
- LeetCode - 5 - (重复的子字符串<kmp>、最长回文子串、转置矩阵、二叉树的(左右)视图)
- C.Ducky Debugging(简单判断/签到)(2021年度训练联盟热身训练赛第五场 )
- LeetCode -3 - (字符串相加、最大连续1的个数<ⅠⅢ>、考试的最大困扰度、删除链表的倒数第N个结点)
- L2-005 集合相似度(set判重)
- Dom 文档对象模型
- CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)
- 278 · draw fill
- 1242 · non overlapping interval
- LeetCode - 6 - (字符串相乘、下一個更大元素<ⅠⅡⅢ>、k個一組翻轉鏈錶)
- 867 · four key keyboard
猜你喜欢

重写与重载的定义与区别

363 · 接雨水

E.Figure Skating (字符串排序/签到) (2021年度训练联盟热身训练赛第五场 )

LeetCode - 2 - (括号生成、最长回文串、环形链表、反转链表、两两交换链表中的节点)

The system log file is too large

Leetcode - 1 - (substructure, combination, spiral matrix and full arrangement of tree < Ⅰ Ⅲ >)

A.Binary Seating (概率) (2021年度训练联盟热身训练赛第五场)

Leetcode - 6 - (chaîne multiplicatrice, prochain élément plus grand < Ⅰ Ⅱ Ⅲ >, K liste de chaînes inversées)

L2-001 紧急救援 (最短路Dijkstra的扩展 - 最短路径数&路径最大权值)

C. Ducky debugging (Game 5 of 2021 training League warm-up training competition)
随机推荐
Codeforces Round #610 (Div. 2)
Kotlin协程+Flow+Retrofit实现网络请求
B. Cutting corners (simple geometry / sign in) (Game 5 of 2021 Training Alliance warm-up training competition)
C.Ducky Debugging(简单判断/签到)(2021年度训练联盟热身训练赛第五场 )
H.Happy Number (进制转换/第n个特殊数)(2021牛客暑期多校训练营9 )
CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)
Final keyword
A.Binary Seating (概率) (2021年度训练联盟热身训练赛第五场)
363 · rainwater connection
Kotlin Flow实现线程切换
友情链接汇总qwq
Codeforces Round #774 (Div. 2)
Codeforces Round #778
437. Path sum III
838 · 子数组和为K
LeetCode - 4 - (接雨水、无重复字符的最长子串、分发糖果、二叉树的<前中后层>序遍历)
系统日志文件过大优化
接口的讲解以及使用
Introduction
B. Ball Dropping (简单几何计算 / 相似三角形) (2021牛客暑期多校训练营1)