0x40106e movl q4312078qx2b,0xffffffdc(%ebp)
0x401075 movl q4312078qx31,0xffffffe4(%ebp)
0x40107c movl q4312078qx74,0xffffffec(%ebp)
0x401083 movl q4312078qx19,0xffffffe8(%ebp)
0x40108a movl q4312078qx7,0xffffffd8(%ebp)
0x401091 movl q4312078qx14,0xffffffe0(%ebp)
0x401098 mov q4312078qxdead,%edi
0x40109d mov q4312078qx2,%ecx
0x4010a2 mov %ecx,%esi
0x4010a4 mov q4312078qx3,%ecx
0x4010a9 mov q4312078qx2,%ebx
0x4010ae sub %esi,%ebx
0x4010b0 imul q4312078qxc,%ebx,%ebx
0x4010b3 mov q4312078qx3,%edx
0x4010b8 sub %ecx,%edx
0x4010ba lea 0xffffffd8(%ebp),%eax
0x4010bd lea (%ebx,%edx,4),%ebx
0x4010c0 add %ebx,%eax
0x4010c2 mov (%eax),%edi
0x4010c4 loop 0x4010a9
0x4010c6 mov %esi,%ecx
0x4010c8 loop 0x4010a2
0x4010ca mov q4312078qxbeef,%edi
编辑:我现在了解循环逻辑。但是,在跟踪所有值时,我很难过。我被卡在这里
lea 0xffffffd8(%ebp),%eax
我怎么知道%ebp是什么?
#1 楼
代码中有2个循环:0x40109d mov $ 0x2,%ecx0x4010a2 mov%ecx,%esi
0x4010a4 mov $ 0x3,%ecx0x4010a9 mov $ 0x2,%ebx
...
第一个循环
...
0x4010c4循环0x4010a9
0x4010c6 mov%esi,%ecx
第二个循环
0x4010c8循环0x4010a2
当3在0x4010a4移至%ecx时,第一个循环进行了三遍
第二个循环在2x在0x40109d移至%ecx中时进行了两次在进一步在第一个循环内使用%ecx之前,保存在%esi处。
此外,这里是有关LOOP操作码的信息
0x4010ba lea 0xffffffd8(%ebp) ,%eax
,这意味着%eax通过计算%ebp + 0xffffffd8
0x4010bd lea(%ebx,%edx, 4),%ebx
这是%ebx =%ebx +%edx * 4
0x4010c0添加%ebx,%eax的地方
这里的%ebx是添加到%eax
0x4010c2 mov(%eax),%edi
最后%edi获取%eax指向的数据。 br />
一个小的asm参考。
评论
谢谢,这对我来说是一个好的开始!但是我现在很难弄清楚%edi中包含哪些值。您能解释一下这里发生的情况吗:lea 0xffffffd8(%ebp),%eax
– duder
13年8月11日在21:07
评论
我建议您写有关yr edit的新问题“ lea 0xffffffd8(%ebp),%eax”-> eax = ebp + 0xffffffd8,或“ eax = ebp-0x28”。 ebp将在函数的前面设置。它通常看起来像“ mov%esp,%ebp / sub $