帮我理解数组?
逆向工程
拆卸
部件
2021-06-17 15:58:53
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



