当前位置: 代码迷 >> 汇编语言 >> 两段FASM代码,帮忙见见
  详细解决方案

两段FASM代码,帮忙见见

热度:154   发布时间:2016-05-02 04:28:02.0
两段FASM代码,帮忙看看
macro alignsize value{ rb(value-1) -($+value-1)mod value}
alignsize这个宏是什么意思
virtual at 0
db str,0
alignsize 4
size=$
end virtual
.x=size
repeate size/4
virtual at 0
db str,0
alignsize 4
load .v dword from (.x-4)
.v=((.v shl 6) and 0ffffffffh) or (.v shr (32-6))
end virtual
push .v
pop edx
ror edx,6
push edx
times % nop
.x=.x-4
end repeat
size=$,size的地址是什么,从.x-4看应该是紧挨着str的地址,因为这段代码是循环倒序取4个字节的数据加密,可str之后不是alignsize 4编译后的代码吗?既然size是地址,为什么还有size/4,为什么有两个virtual at 0,而且反汇编后代码里每次循环生成的.v的内存地址还不一样。

------解决思路----------------------
;$表示当前地址。

db str,0 ;定义str,后面跟0
alignsize 4 ;对齐当前地址到4的整数倍
size=$ ;让size这个变量的值为当前地址

;比如
;00000000:41 42 00 ;"ABC",0
;00000003:
;00000004;alignsize 4 
;size=$=00000004
  相关解决方案