使用FASM我试图用SHR
指令移位dword,该指令应该将位移到右边附加零。这是代码:
format ELF executable 3
entry start
segment readable executable
start:
cmp byte [counter],0
jz fin
mov eax,4
mov ebx,1
mov ecx,some
mov edx,4
int 0x80 ; write 4 bytes
mov eax,4
mov ebx,1
mov ecx,splitter
mov edx,1
int 0x80 ; write a split byte (0x42)
shr dword [some],4
dec byte [counter]
jmp start
fin:
mov eax,1
xor ebx,ebx
int 0x80
segment readable writeable
some db 0x89,0xAB,0xCD,0xEF
splitter db 0x42
counter db 10
我希望得到类似的东西:0x89ABCDEF -> 0x089ABCDE -> 0x0089ABCD -> 0x00089ABC -> 0x000089AB -> 0x0000089A -> 0x00000089 -> 0x00000008 -> 0x00000000
但我得到的是:0x89ABCDEF -> 0xB8DAFC0E -> 0xABCDEF00 -> 0xDAFC0E00 -> 0xCDEF0000 -> 0xFC0E0000 -> 0xEF000000 -> 0x0E000000 -> 0x00000000
我做错了什么?
P上。 S.通过打开我在十六进制编辑器中重定向输出的文件来获取此值。 (这不是输出本身)
答案 0 :(得分:1)
您的号码以小端存储。 http://en.wikipedia.org/wiki/Endianness
澄清一下, 0x89ABCDEF存储为0xEFCDAB89,因此右移产生0x0EFCDAB8,这是您看到的字节,顺序相反