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