帮我理解数组?

逆向工程 拆卸 部件
2021-06-17 15:58:53

在此处输入图片说明

问题 #1lea edx, [esp+24]数组开头吗?eax, [esp+140]指数?

那么add eax, edx 这里在做什么,这个源代码是什么意思?你能解释一下吗?

我对数组和在汇编中索引数组感到困惑。这里有几个屏幕截图。请帮我理解这个数组是如何工作的?它如何索引等等。

在此处输入图片说明

  1. 在此处输入图片说明
  2. 在此处输入图片说明
1个回答

第一个屏幕截图显示

cmp al,59h 

59h 是 ==

C:\\>python -c "print '%c' % 0x59"
Y

所以它应该对应于你的 if 子句(如果 ch[i] == 'Y')

那么这意味着

源代码中的前一行是一个 for 循环,其计数器变量 i 由mov eax表示 ,[esp+140]

它应该在块中较早的某个地方被初始化为 0

edx 是数组的开始(可能是 8 位大小)ch
它是一个指针,地址像 0x401234 在这一行
假设 0x401234
那么该数组将被
0x401234+0 , +1 , +2 , +3 , +4 访问,+5 ..... 直到最大值 g (未显示在屏幕截图中)

屏幕截图中的 movzx 行访问基础变量 ch[i] 或 *(byte / char / type *) (0x401234 , ..5 , ..6 ,..7 , --so on until 0x401234+g )

所以数组将像这样访问(esp+140)将在每次 for 循环迭代结束时递增

0x401234 = 'Y' (edx = 401234 + ( eax = [esp+140] == 0 )) = *(char *)0x401234
0x401235 = 'Y' (edx = 401234 + ( eax = [esp+140] == 1 )) = *(char *)0x401235
0x401236 = 'Y' (edx = 401234 + ( eax = [esp+140] == 2 )) = *(char *)0x401236
..... until 0x401234+g