美文网首页
一些汇编知识总结

一些汇编知识总结

作者: 小白King | 来源:发表于2019-02-21 21:28 被阅读0次

一、参数和局部变量的布局:
_cdecl调用约定,stdcall约定,函数参数入栈:(从右往左)(只有pascal是从左往右)
00401000:
push 6
push 5
call 00401010 ;add函数首地址
add esp ,8 ;平衡栈
xor eax,eax
retn
nop
add()函数代码
00401010:
mov eax,dword ptr [esp+8]
mov ecx,dword ptr [esp+4]
add eax,ecx
retn
优化处理:
enter:xxx,0(push ebp,mov ebp,esp,sub esp,xxx);创建空间放局部变量
leave:(add esp,xxx,pop ebp);恢复现场
ret 8(参数个数乘4h)
ebp寻址找参数,在ebp处进行,ebp+8h(第一个参数),ebp+Ch(第二个参数)
esp寻址找参数,在retn处进行,esp+4h(第一个参数),esp+8h(第二个参数)
32位的情况下:栈传递参数
64位的情况下:rdi,rsi,rdx,rcx,r8,r9寄存器用完,再栈传递参数
参数的调用偏移是正的,局部变量的调用偏移是负的
(push reg = sub esp,4)(pop reg = add esp,4)
实践下手撕汇编:

image.png
image.png
image.png

二、全局变量的布局:
一般放在内存区域中(通常是.data,具有可读写的权限):
mov eax,dword ptr [4084C0h];直接调用全局变量,其中4084C0h是全局变量的地址

三、数组的布局:
mov eax,[407040h+eax](基址+偏移量)

四、控制语句:
test指令,cmp指令,有时会有dec指令(自减):
转移指令一览:一般用于条件判断时和循环时
call:调用
jmp:无条件跳转
jo:溢出跳转(OF=1),对应于jno
jb:低于/进位跳转(CF=1),对应jnb(bottom)
ja:高于跳转,对应jna(tall)
jbe:低于等于跳转
jae:高于等于跳转
je/jz:相等跳转(ZF=1),对应jne/jnz
js:符号为负跳转(SF=1),对应jns
jl:小于跳转,对应jnl(low)
jle:小于等于跳转
jg:大于跳转,对应jng(big,great,large)
jge:大于等于跳转
nop:不跳转,空指针
在Maximize Speed优化下:lea相当于一条算数指令
汇编除法优化:转成乘法运算,右移多少位,就是除以2的多少次方,数学公式表示:
x/2^n = x>>n(x>=0),x/2^n = (x+(2^n-1))>>n(x<0)
有符号位移位运算:sar
无符号位移位运算:shr
C字符串:\0作为结束标志
mov eax,[401000h];直接寻址,传的是地址里面的数据
mov eax,[ecx];寄存器间接寻址,传的是寄存器中存的地址里面的数据
lea eax,[401000h];将值401000h写入eax寄存器

x64:类似于32位,稍有不同~等待更新
一般来说都有main,没有时可能是/MT模式,此时找call cs:exit,该处上面的call 就是main函数
x64的exe文件是利用RCX,RDX,R8,R9先进行传参,不够再调用栈来存。
rdi演化成了rbp。

相关文章

  • 一些汇编知识总结

    一、参数和局部变量的布局:_cdecl调用约定,stdcall约定,函数参数入栈:(从右往左)(只有pascal是...

  • 汇编跟踪 Objc alloc 实现 & init

    今天看了一些关于 Objc 相关的知识,也是一些基础部分的知识。使用汇编来查看 alloc 的实现过程。 然后分享...

  • 补充一些汇编的知识

    关于指令和数据 指令和数据都是应用上的概念, 在内存和磁盘中,指令和数据没有任何区别 一个CPU有N根地址线, 可...

  • 【经验】数据仓库和大数据系统框架及常见问题

    1. 摘要 笔者在学习过程中遇到的大数据框架,系统和数据库遇到的一些问题总结和知识汇编,也分享给大家一起学习。 2...

  • IOS arm64常用的汇编

    导论 生成汇编文件 寄存器 arm64 汇编条件域 arm64 汇编指令 总结 1. 生成汇编文件 2. 寄存器 ...

  • 初中数学题目攻克方法

    1,《2021版河南中考45套汇编》刷题库,2,自己去总结中考知识点,做成思维导图,去做出来3,自己去总结习题,总...

  • 汇编总结

    为了表示我对简书『饱醉豚』事件的不满,简书不再更新,后续有文章只更新 个人博客和 掘金 欢迎移步 个人博客或者 掘...

  • 汇编学习总结

    汇编总结 汇编的发展史 机械语言 由0和1组成的机器指令(如:0101 0001 1101 0110) 汇编语言(...

  • 混子汇编语言学习之01笔记

    第一章 基础知识 1、指令 机器指令:CPU能直接识别并执行的二进制编码,就是一些二进制数。汇编指令:汇编指令...

  • 汇编语言

    基础知识: 汇编语言的主体是汇编指令,它决定了汇编语言特性 程序员用汇编语言写出源程序,再用汇编编译器将其编译成机...

网友评论

      本文标题:一些汇编知识总结

      本文链接:https://www.haomeiwen.com/subject/jhuryqtx.html