需要帮助找出这个程序的作用 - (汇编程序)

时间:2014-03-11 17:34:37

标签: assembly x86 reverse-engineering

我是汇编程序的新手,我需要帮助才能找到该程序的功能:

  MOV SI, 0x0210
  MOV BX, 0x0220
  MOV CX, 0x5
L1: MOV AL, [SI]
  NOT AL
  INC AL
  MOV [BX], AL
  INC BX
  INC SI
  LOOP L1
  HLT

有人可以告诉我什么是" 0x .."在地址的开头?

(所有数字均为HEX)。

非常感谢!!

2 个答案:

答案 0 :(得分:0)

MOV SI,0x0210链接到SI中的地址

MOV BX,0x0220链接到BX中的地址

MOV CX,0x5将5放入CX

L1:MOV AL,[SI](L1也被认为是跳跃的标签)[SI]指向x210的值

NOT AL如果AL = / = 0退出循环

INC AL如果为0则使AL = 1

MOV [BX],AL将1或AL的值放入x220

INC BX将指针更改为下一个字符串(假设它们是这里的字节)

INC SI ^相同

LOOP L1回到L1

HLT ......

答案 1 :(得分:0)

正如您已经注意到的那样,数字文字是以十六进制为基础的。 0x是一个常见的前缀,用于表示数字应解释为十六进制。有些汇编程序使用后缀 h代替(如1234h),有些则支持这两种变体。

如果LOOP!= 0,CX指令会将CX减少1并跳转到给定地址。因此,此程序中的循环将运行5次。

在每次迭代期间,从地址0x210开始的一块内存加载一个字节。然后取消该值((~x)+1 == -x),并将结果存储在从地址0x220开始的内存块中。源地址和目标地址都会递增,以便它们在循环的下一次迭代中指向相应数组中的下一个字节。