我认为这是一个容易(也许太容易)回答的问题,但在Google上搜索了近两个小时后,我没有找到答案。我相信我的问题在于我不理解这个语法正在做什么。
我正在查看IDA中的一些反汇编代码,我不知道以下代码在做什么:
mov dl, byte_404580[eax]
如果我跳转到
byte_404580
,我会发现.data:00404580 byte_404580 db 69h
,告诉我这个值是0x69
。但我不知道它的用途。让我提供一下这段代码出现的上下文:
mov eax, 0x73 ; Move hex 73 to EAX
and eax, 0x0F ; Keep lower half of EAX
mov dl, byte_404580[eax] ; MAGIC
假设EAX
最初为0x73,那么我得到DL
=0x76。我尝试改变EAX
的值以找到一些模式,但是我还没有弄清楚正在发生什么。
byte_404583
的值是多少? - slavemaster0x404580 + (eax & 0x0F)
,将其视为地址,并从该地址中取一个字节。这表明0x404580
处的数据是一个字节数组(根据掩码很可能有 0x10 个元素),而不是单个字节。与 C 语言的2["hello"] == "hello"[2]
进行比较。 - DCoderbyte_404583=0x76
- CatShoes0x404580
处的数据,它是一个字节数组(确切地说是16个字节)。然后,我将EAX初始化为最不重要的半字节,以获取DL的值。非常感谢您的帮助。如果您将其写成答案,我会为您标记的。 - CatShoes