【Android 逆向】x86 汇编 ( align | db | dw | dd | nop | 伪指令 )

举报
韩曙亮 发表于 2022/01/11 01:29:52 2022/01/11
【摘要】 文章目录 一、align 字节对齐指令二、db / dw / dd 指令三、nop 指令总结 一、align 字节对齐指令 align 字节对齐 ; 默认情况下是 ...





一、align 字节对齐指令



align 字节对齐 ; 默认情况下是 16 16 16 字节对齐 ; 该指令是伪指令 , 没有机器码与之对应 ;

align 16h

  
 
  • 1

内存中是分页的 , 如果要记录每一块内存的使用状况 , 需要占用很大的内存空间 , 为了方便系统中内存的使用与记录 , 首先将操作系统分页 , 只需要记录每个分页的使用情况即可 , 每个分页只有 使用 / 没有使用 两种状态 ;
如果有 8 8 8 个分页 , 只需要有 8 8 8 位 , 1 1 1 字节 , 就可以记录 8 8 8 个分页中 , 哪块内存使用了 , 哪块内存没有使用 ;

实际中 , 每个分页有 4 4 4 K , 以分页为单位 , 将内存分配给各个进程 ;

分页内部的数据 , 如果是乱的 , 如 第 0 0 0 字节有数据 , 然后空了 2 2 2 字节 , 第 3 3 3 字节才有下一个数据 , 这样内存的使用效率很低 , 这里就需要引入对齐操作 ;
将分页中的数据按照 4 4 4 字节对齐 , CPU 如果读取内存中的数据 , 可以直接读取数据 , 加载内存数据到高速缓存中 ; 如果没有对齐 , 还要进行地址操作 , 从间隔的内存中获取数据 ;

如果设置了 16 16 16 字节对齐 , 数据只有 15 15 15 字节 , 那么在数据后会空出一个字节 ;





二、db / dw / dd 指令



db 指令 , 用于声明 字符 / 字符串 常量 ;

# 声明字符
db 'a'

# 声明字符串
db 'a', 'b', 'c'

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

dw 指令 , 用于声明 2 2 2 字节短整型 ;

dw 0x1234

  
 
  • 1

dd 指令 , 用于声明 4 4 4 字节长整型 ;

dd 0x12345678

  
 
  • 1

上述 db , dw , dd 指令 , 都是伪指令 , 没有机器码与之对应 ;





三、nop 指令



nop 指令 是 空指令 , 没有参数 ; 该指令的作用是不做任何操作 ;

x86 汇编中 , nop 指令有对应的机器码 0x90 与之对应 ;





总结



align 字节对齐 , db 声明字符 / 字符串 , nop 空指令
cmp 比较 , test
call 调用 , jmp 跳转 (a , b , c , g , l , o , p , s , z , e , n)
lea , lds , les , lfs , lgs , lss , mov 移动
push , pop , pushf , popf , pushd , popd , pushad , popad , pusha , popa
ret , retn , set
add , sub , mul , div
xor , not , shl , shr , sal , sar , rol , ror , rcl , rcr

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/120697159

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。