首页
社区
课程
招聘
求助:关于参数传递的分析问题
2004-11-13 11:19 3697

求助:关于参数传递的分析问题

2004-11-13 11:19
3697
父函数调用过程如下:

.text:0805DADF 31 F6                   xor     esi, esi
.text:0805DAE1 8D 76 00                lea     esi, [esi+0]
.text:0805DAE4
.text:0805DAE4                         text_805DAE4:
.text:0805DAE4 83 C4 F8                add     esp, 0FFFFFFF8h
.text:0805DAE7 FF B3 08 F8 FF FF       push    dword ptr [ebx-7F8h]
.text:0805DAED 56                      push    esi
.text:0805DAEE E8 4D FC FF FF          call   sysStackOneDriverInstall
.text:0805DAF3 83 C4 10                add     esp, 10h
.text:0805DAF6 46                      inc     esi
.text:0805DAF7 85 F6                   test    esi, esi
.text:0805DAF9 7E E9                   jle     short _text_805DAE4

看起来,sysStackOneDriverInstall 遵循_cdecl规范,由调用函数负责清理堆栈。这里有一个疑惑:压入的参数一个是dword,一个是esi,也就是占用了八个字节的堆栈空间,可为什么清理时却释放了16个字节呢?

再看被调用函数sysStackOneDriverInstall的堆栈。
text:0805D740                         public sysStackOneDriverInstall
.text:0805D740                         sysStackOneDriverInstall proc near
.text:0805D740                                                       ; CODE XREF: main+4DEp
.text:0805D740                                                       ; sysStackDriverInstall+3Ep
.text:0805D740
.text:0805D740                         var_58= dword ptr -58h
.text:0805D740                         var_3C= dword ptr -3Ch
.text:0805D740                         var_38= dword ptr -38h
.text:0805D740                         var_34= dword ptr -34h
.text:0805D740                         var_30= dword ptr -30h
.text:0805D740                         var_2C= dword ptr -2Ch
.text:0805D740                         var_28= dword ptr -28h
.text:0805D740                         var_24= dword ptr -24h
.text:0805D740                         var_20= dword ptr -20h
.text:0805D740                         var_1C= dword ptr -1Ch
.text:0805D740                         var_18= dword ptr -18h
.text:0805D740                         var_14= byte ptr -14h
.text:0805D740                         arg_0= dword ptr  8
.text:0805D740
.text:0805D740 55                      push    ebp
.text:0805D741 89 E5                   mov     ebp, esp
.text:0805D743 83 EC 4C                sub     esp, 4Ch
.text:0805D746 57                      push    edi
.text:0805D747 56                      push    esi
.text:0805D748 53                      push    ebx
.text:0805D749 90                      nop
.text:0805D74A 90                      nop
.text:0805D74B 90                      nop
.text:0805D74C 90                      nop
.text:0805D74D 90                      nop
.text:0805D74E 90                      nop
.text:0805D74F 90                      nop
.text:0805D750 BB F0 1F 08 08          mov     ebx, offset $_GLOBAL_OFFSET_TABLE_ ; PIC mode
.text:0805D755 8B 45 08                mov     eax, [ebp+arg_0]
.text:0805D758 8D 14 80                lea     edx, [eax+eax*4]
.text:0805D75B 8B 83 F4 01 00 00       mov     eax, [ebx+1F4h]
.text:0805D761 83 C0 20                add     eax, 20h

奇怪了, 为什么它只有一个参数arg_0啊,调用时明明是压入两个的!各位大虾请帮小弟指点迷津,谢谢了!

[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!

收藏
免费 1
打赏
分享
最新回复 (5)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lytt 2004-11-13 11:32
2
0
父函数还有一个问题:
esi 先是清零,调用完后是 inc esi,紧接又是test esi,esi; jle short _text_805DAE4; 这样test esi, esi的结果肯定是大于0的,而跳转的条件是esi <= 0,这样岂不是根本不会进行跳转的吗?不知道这条指令有何用意?

.text:0805DADF 31 F6                   xor     esi, esi
.text:0805DAE1 8D 76 00                lea     esi, [esi+0]
.text:0805DAE4
.text:0805DAE4                         text_805DAE4:
.text:0805DAE4 83 C4 F8                add     esp, 0FFFFFFF8h
.text:0805DAE7 FF B3 08 F8 FF FF       push    dword ptr [ebx-7F8h]
.text:0805DAED 56                      push    esi
.text:0805DAEE E8 4D FC FF FF          call   sysStackOneDriverInstall
.text:0805DAF3 83 C4 10                add     esp, 10h
.text:0805DAF6 46                      inc     esi
.text:0805DAF7 85 F6                   test    esi, esi
.text:0805DAF9 7E E9                   jle     short _text_805DAE4
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
firstrose 16 2004-11-13 11:36
3
0
这是什么软件?

最好的方法是数sysStackOneDriverInstall的push/pop

另外,参数可能有没有用到的。

esi在sysStackOneDriverInstall里可能改变。你贴的不全。
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lytt 2004-11-13 12:01
4
0
好,谢谢firstrose,我用的是IDA4.6。我把sysStackOneDriverInstall贴全,不过会比较长。
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lytt 2004-11-13 12:02
5
0
.text:0805D740                         public sysStackOneDriverInstall
.text:0805D740                         sysStackOneDriverInstall proc near
.text:0805D740                                                       ; CODE XREF: main+4DEp
.text:0805D740                                                       ; sysStackDriverInstall+3Ep
.text:0805D740
.text:0805D740                         var_58= dword ptr -58h
.text:0805D740                         var_3C= dword ptr -3Ch
.text:0805D740                         var_38= dword ptr -38h
.text:0805D740                         var_34= dword ptr -34h
.text:0805D740                         var_30= dword ptr -30h
.text:0805D740                         var_2C= dword ptr -2Ch
.text:0805D740                         var_28= dword ptr -28h
.text:0805D740                         var_24= dword ptr -24h
.text:0805D740                         var_20= dword ptr -20h
.text:0805D740                         var_1C= dword ptr -1Ch
.text:0805D740                         var_18= dword ptr -18h
.text:0805D740                         var_14= byte ptr -14h
.text:0805D740                         arg_0= dword ptr  8
.text:0805D740
.text:0805D740 55                      push    ebp
.text:0805D741 89 E5                   mov     ebp, esp
.text:0805D743 83 EC 4C                sub     esp, 4Ch
.text:0805D746 57                      push    edi
.text:0805D747 56                      push    esi
.text:0805D748 53                      push    ebx
.text:0805D749 90                      nop
.text:0805D74A 90                      nop
.text:0805D74B 90                      nop
.text:0805D74C 90                      nop
.text:0805D74D 90                      nop
.text:0805D74E 90                      nop
.text:0805D74F 90                      nop
.text:0805D750 BB F0 1F 08 08          mov     ebx, offset $_GLOBAL_OFFSET_TABLE_ ; PIC mode
.text:0805D755 8B 45 08                mov     eax, [ebp+arg_0]
.text:0805D758 8D 14 80                lea     edx, [eax+eax*4]
.text:0805D75B 8B 83 F4 01 00 00       mov     eax, [ebx+1F4h]
.text:0805D761 83 C0 20                add     eax, 20h
.text:0805D764 8B 04 D0                mov     eax, [eax+edx*8]
.text:0805D767 85 C0                   test    eax, eax
.text:0805D769 74 11                   jz      short _text_805D77C
.text:0805D76B FF D0                   call    eax
.text:0805D76D 85 C0                   test    eax, eax
.text:0805D76F 74 0B                   jz      short _text_805D77C
.text:0805D771 B8 FF FF FF FF          mov     eax, 0FFFFFFFFh
.text:0805D776 E9 FE 01 00 00          jmp     _text_805D979
.text:0805D776                         ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:0805D77B 90                      align 4
.text:0805D77C
.text:0805D77C                         _text_805D77C:                ; CODE XREF: sysStackOneDriverInstall+29j
.text:0805D77C                                                       ; sysStackOneDriverInstall+2Fj
.text:0805D77C 8B 55 08                mov     edx, [ebp+arg_0]
.text:0805D77F 8D 04 92                lea     eax, [edx+edx*4]
.text:0805D782 8B BB F4 01 00 00       mov     edi, [ebx+1F4h]
.text:0805D788 8D 34 C5 00 00 00 00    lea     esi, ds:0[eax*8]
.text:0805D78F 8B 44 3E 0C             mov     eax, [esi+edi+0Ch]
.text:0805D793 FF D0                   call    eax
.text:0805D795 89 45 CC                mov     [ebp+var_34], eax
.text:0805D798 85 C0                   test    eax, eax
.text:0805D79A 0F 84 D7 01 00 00       jz      _text_805D977
.text:0805D7A0 C7 45 C8 00 00 00 00    mov     [ebp+var_38], 0
.text:0805D7A7 8B 45 CC                mov     eax, [ebp+var_34]
.text:0805D7AA 39 45 C8                cmp     [ebp+var_38], eax
.text:0805D7AD 0F 8D C4 01 00 00       jge     _text_805D977
.text:0805D7B3 89 75 C4                mov     [ebp+var_3C], esi
.text:0805D7B6 83 C7 10                add     edi, 10h
.text:0805D7B9 8D 76 00                lea     esi, [esi+0]
.text:0805D7BC
.text:0805D7BC                         _text_805D7BC:                ; CODE XREF: sysStackOneDriverInstall+231j
.text:0805D7BC 8B 8B 94 F7 FF FF       mov     ecx, [ebx-86Ch]
.text:0805D7C2 8D 0C 49                lea     ecx, [ecx+ecx*2]
.text:0805D7C5 C1 E1 04                shl     ecx, 4
.text:0805D7C8 03 8B F8 01 00 00       add     ecx, [ebx+1F8h]
.text:0805D7CE C7 01 00 00 00 00       mov     dword ptr [ecx], 0
.text:0805D7D4 C7 41 08 00 00 00 00    mov     dword ptr [ecx+8], 0
.text:0805D7DB C7 41 10 00 00 00 00    mov     dword ptr [ecx+10h], 0
.text:0805D7E2 C7 41 20 00 00 00 00    mov     dword ptr [ecx+20h], 0
.text:0805D7E9 C7 41 18 00 00 00 00    mov     dword ptr [ecx+18h], 0
.text:0805D7F0 C7 41 28 00 00 00 00    mov     dword ptr [ecx+28h], 0
.text:0805D7F7 C7 41 04 00 00 00 00    mov     dword ptr [ecx+4], 0
.text:0805D7FE C7 41 0C 00 00 00 00    mov     dword ptr [ecx+0Ch], 0
.text:0805D805 C7 41 14 00 00 00 00    mov     dword ptr [ecx+14h], 0
.text:0805D80C C7 41 24 00 00 00 00    mov     dword ptr [ecx+24h], 0
.text:0805D813 C7 41 1C 00 00 00 00    mov     dword ptr [ecx+1Ch], 0
.text:0805D81A C7 41 2C 00 00 00 00    mov     dword ptr [ecx+2Ch], 0
.text:0805D821 C7 45 E8 00 00 00 00    mov     [ebp+var_18], 0
.text:0805D828 83 C4 F8                add     esp, 0FFFFFFF8h
.text:0805D82B 8D 45 E8                lea     eax, [ebp+var_18]
.text:0805D82E 50                      push    eax
.text:0805D82F 8B 83 94 F7 FF FF       mov     eax, [ebx-86Ch]
.text:0805D835 8B 93 FC 01 00 00       mov     edx, [ebx+1FCh]
.text:0805D83B 8D 04 40                lea     eax, [eax+eax*2]
.text:0805D83E 8D 04 82                lea     eax, [edx+eax*4]
.text:0805D841 50                      push    eax
.text:0805D842 8B 83 94 F7 FF FF       mov     eax, [ebx-86Ch]
.text:0805D848 8D 14 C0                lea     edx, [eax+eax*8]
.text:0805D84B 8D 14 90                lea     edx, [eax+edx*4]
.text:0805D84E 8B 83 00 02 00 00       mov     eax, [ebx+200h]
.text:0805D854 8D 14 90                lea     edx, [eax+edx*4]
.text:0805D857 52                      push    edx
.text:0805D858 51                      push    ecx
.text:0805D859 8B 83 94 F7 FF FF       mov     eax, [ebx-86Ch]
.text:0805D85F 8D B3 1C 09 00 00       lea     esi, [ebx+91Ch]
.text:0805D865 8D 04 80                lea     eax, [eax+eax*4]
.text:0805D868 8D 44 86 04             lea     eax, [esi+eax*4+4]
.text:0805D86C 50                      push    eax
.text:0805D86D 8B 55 C8                mov     edx, [ebp+var_38]
.text:0805D870 52                      push    edx
.text:0805D871 8B 55 C4                mov     edx, [ebp+var_3C]
.text:0805D874 8B 04 3A                mov     eax, [edx+edi]
.text:0805D877 FF D0                   call    eax
.text:0805D879 83 C4 20                add     esp, 20h
.text:0805D87C 83 F8 FF                cmp     eax, 0FFFFFFFFh
.text:0805D87F 0F 84 E3 00 00 00       jz      _text_805D968
.text:0805D885 8B 83 94 F7 FF FF       mov     eax, [ebx-86Ch]
.text:0805D88B 8A 55 08                mov     dl, byte ptr [ebp+arg_0]
.text:0805D88E 8D 8B 10 09 00 00       lea     ecx, [ebx+910h]
.text:0805D894 8D 04 80                lea     eax, [eax+eax*4]
.text:0805D897 88 54 81 0C             mov     [ecx+eax*4+0Ch], dl
.text:0805D89B 8B 83 94 F7 FF FF       mov     eax, [ebx-86Ch]
.text:0805D8A1 8A 93 94 F7 FF FF       mov     dl, [ebx-86Ch]
.text:0805D8A7 8D 04 80                lea     eax, [eax+eax*4]
.text:0805D8AA 88 54 81 0D             mov     [ecx+eax*4+0Dh], dl
.text:0805D8AE 8B 55 E8                mov     edx, [ebp+var_18]
.text:0805D8B1 85 D2                   test    edx, edx
.text:0805D8B3 74 6B                   jz      short _text_805D920
.text:0805D8B5 83 C4 FC                add     esp, 0FFFFFFFCh
.text:0805D8B8 8D 45 E4                lea     eax, [ebp+var_1C]
.text:0805D8BB 50                      push    eax
.text:0805D8BC 8D 45 E0                lea     eax, [ebp+var_20]
.text:0805D8BF 50                      push    eax
.text:0805D8C0 8D 45 DC                lea     eax, [ebp+var_24]
.text:0805D8C3 50                      push    eax
.text:0805D8C4 8D 45 D8                lea     eax, [ebp+var_28]
.text:0805D8C7 50                      push    eax
.text:0805D8C8 8D 45 D4                lea     eax, [ebp+var_2C]
.text:0805D8CB 50                      push    eax
.text:0805D8CC 8D 45 D0                lea     eax, [ebp+var_30]
.text:0805D8CF 50                      push    eax
.text:0805D8D0 52                      push    edx
.text:0805D8D1 E8 7E CF 01 00          call    dbufGetPoolWatermarks
.text:0805D8D6 83 C4 20                add     esp, 20h
.text:0805D8D9 83 C4 F4                add     esp, 0FFFFFFF4h
.text:0805D8DC 6A 08                   push    8                     ; size
.text:0805D8DE E8 29 DD FE FF          call    _malloc
.text:0805D8E3 89 C2                   mov     edx, eax
.text:0805D8E5 8B 83 04 02 00 00       mov     eax, [ebx+204h]
.text:0805D8EB 89 02                   mov     [edx], eax
.text:0805D8ED 8B 83 94 F7 FF FF       mov     eax, [ebx-86Ch]
.text:0805D8F3 8D 04 80                lea     eax, [eax+eax*4]
.text:0805D8F6 8D 04 86                lea     eax, [esi+eax*4]
.text:0805D8F9 83 C4 FC                add     esp, 0FFFFFFFCh
.text:0805D8FC 89 42 04                mov     [edx+4], eax
.text:0805D8FF FF 75 E4                push    [ebp+var_1C]
.text:0805D902 52                      push    edx
.text:0805D903 FF B3 08 02 00 00       push    dword ptr [ebx+208h]
.text:0805D909 FF 75 D8                push    [ebp+var_28]
.text:0805D90C FF 75 D4                push    [ebp+var_2C]
.text:0805D90F FF 75 D0                push    [ebp+var_30]
.text:0805D912 FF 75 E8                push    [ebp+var_18]
.text:0805D915 E8 3E CE 01 00          call    dbufSetPoolWatermarks
.text:0805D91A 83 C4 30                add     esp, 30h
.text:0805D91D 8D 76 00                lea     esi, [esi+0]
.text:0805D920
.text:0805D920                         _text_805D920:                ; CODE XREF: sysStackOneDriverInstall+173j
.text:0805D920 FF B3 94 F7 FF FF       push    dword ptr [ebx-86Ch]
.text:0805D926 8D 83 92 D2 FF FF       lea     eax, [ebx-2D6Eh]
.text:0805D92C 50                      push    eax
.text:0805D92D 8D 83 9C D2 FF FF       lea     eax, [ebx-2D64h]
.text:0805D933 50                      push    eax                   ; char *
.text:0805D934 8D 75 EC                lea     esi, [ebp+var_14]
.text:0805D937 56                      push    esi                   ; char *
.text:0805D938 E8 6F DF FE FF          call    _sprintf
.text:0805D93D 83 C4 F8                add     esp, 0FFFFFFF8h
.text:0805D940 56                      push    esi
.text:0805D941 8D 83 B0 D2 FF FF       lea     eax, [ebx-2D50h]
.text:0805D947 50                      push    eax                   ; char *
.text:0805D948 E8 5F DB FE FF          call    _printf
.text:0805D94D 83 C4 20                add     esp, 20h
.text:0805D950 83 C4 F4                add     esp, 0FFFFFFF4h
.text:0805D953 8D 83 CF D2 FF FF       lea     eax, [ebx-2D31h]
.text:0805D959 50                      push    eax                   ; char *
.text:0805D95A E8 4D DB FE FF          call    _printf
.text:0805D95F FF 83 94 F7 FF FF       inc     dword ptr [ebx-86Ch]
.text:0805D965 83 C4 10                add     esp, 10h
.text:0805D968
.text:0805D968                         _text_805D968:                ; CODE XREF: sysStackOneDriverInstall+13Fj
.text:0805D968 FF 45 C8                inc     [ebp+var_38]
.text:0805D96B 8B 45 CC                mov     eax, [ebp+var_34]
.text:0805D96E 39 45 C8                cmp     [ebp+var_38], eax
.text:0805D971 0F 8C 45 FE FF FF       jl      _text_805D7BC
.text:0805D977
.text:0805D977                         _text_805D977:                ; CODE XREF: sysStackOneDriverInstall+5Aj
.text:0805D977                                                       ; sysStackOneDriverInstall+6Dj
.text:0805D977 31 C0                   xor     eax, eax
.text:0805D979
.text:0805D979                         _text_805D979:                ; CODE XREF: sysStackOneDriverInstall+36j
.text:0805D979 8D 65 A8                lea     esp, [ebp-58h]
.text:0805D97C 5B                      pop     ebx
.text:0805D97D 5E                      pop     esi
.text:0805D97E 5F                      pop     edi
.text:0805D97F C9                      leave
.text:0805D980 C3                      retn
.text:0805D980                         sysStackOneDriverInstall endp
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
firstrose 16 2004-11-13 18:17
6
0
眼拙,没有看到text:0805DAE4调了esp

堆栈没有任何问题

另外关于esi,你可以看看text_805DAE4的xref

就这样吧。
游客
登录 | 注册 方可回帖
返回