首页
社区
课程
招聘
[求助]CALL Getdlgitemtext 居然后返回到0000010去了~?
发表于: 2009-4-12 18:49 4676

[求助]CALL Getdlgitemtext 居然后返回到0000010去了~?

2009-4-12 18:49
4676
riijj 给我们的新人的一个cm,地址在这里:http://bbs.pediy.com/showthread.php?t=12136

我是断的getdlgitemtext  程序运行被断下,如下:

00401230  /$  8B0D BC564000 mov     ecx, dword ptr [4056BC]
00401236  |.  83EC 30       sub     esp, 30
00401239  |.  8D4424 00     lea     eax, dword ptr [esp]
0040123D  |.  53            push    ebx
0040123E  |.  56            push    esi
0040123F  |.  8B35 94404000 mov     esi, dword ptr [<&USER32.GetDlgI>;  USER32.GetDlgItemTextA
00401245  |.  6A 10         push    10                               ; /Count = 10 (16.)
00401247  |.  50            push    eax                              ; |Buffer
00401248  |.  68 E8030000   push    3E8                              ; |ControlID = 3E8 (1000.)
0040124D  |.  51            push    ecx                              ; |hWnd => 0008064E (class='#32770',parent=000A066A)
0040124E  |.  33DB          xor     ebx, ebx                         ; |
00401250  |.  FFD6          call    esi                              ; \GetDlgItemTextA
00401252  |.  83F8 03       cmp     eax, 3
00401255  |.  73 0B         jnb     short 00401262
00401257  |.  5E            pop     esi
00401258  |.  B8 01000000   mov     eax, 1
0040125D  |.  5B            pop     ebx
0040125E  |.  83C4 30       add     esp, 30
00401261  |.  C3            retn

然后就没搞懂了~~~

401250那一句的CALL,返回到00000010去了,请教这里什么回事啊~~`

附上CALL里面的代码:

77D6B0CC  |.  8BC6          mov     eax, esi                         ; |USER32.77D6B0CC
77D6B0CE  |.  68 04100020   push    20001004                         ; |InfoType = 20001004
77D6B0D3  |.  25 FFFF0000   and     eax, 0FFFF                       ; |
77D6B0D8  |.  50            push    eax                              ; |LocaleId
77D6B0D9  |.  FF15 6813D177 call    dword ptr [<&KERNEL32.GetLocaleI>; \GetLocaleInfoW
77D6B0DF  |.  85C0          test    eax, eax
77D6B0E1  |.  74 35         je      short 77D6B118
77D6B0E3  |.  8B45 0C       mov     eax, dword ptr [ebp+C]
77D6B0E6  |.  A3 4C1BD777   mov     dword ptr [77D71B4C], eax
77D6B0EB  |.  8935 481BD777 mov     dword ptr [77D71B48], esi
77D6B0F1  |>  66:8365 10 00 and     word ptr [ebp+10], 0
77D6B0F6  |.  6A 00         push    0                                ; /pDefaultCharUsed = NULL
77D6B0F8  |.  6A 00         push    0                                ; |pDefaultChar = NULL
77D6B0FA  |.  6A 01         push    1                                ; |MultiByteCount = 1
77D6B0FC  |.  8D45 10       lea     eax, dword ptr [ebp+10]          ; |
77D6B0FF  |.  50            push    eax                              ; |MultiByteStr
77D6B100  |.  6A 01         push    1                                ; |WideCharCount = 1
77D6B102  |.  8D45 08       lea     eax, dword ptr [ebp+8]           ; |
77D6B105  |.  50            push    eax                              ; |WideCharStr
77D6B106  |.  6A 00         push    0                                ; |Options = 0
77D6B108  |.  FF35 4C1BD777 push    dword ptr [77D71B4C]             ; |CodePage = CP_ACP
77D6B10E  |.  FF15 6013D177 call    dword ptr [<&KERNEL32.WideCharTo>; \WideCharToMultiByte
77D6B114  |.  85C0          test    eax, eax
77D6B116  |.  75 04         jnz     short 77D6B11C
77D6B118  |>  8365 10 00    and     dword ptr [ebp+10], 0
77D6B11C  |>  8B45 10       mov     eax, dword ptr [ebp+10]
77D6B11F  |.  5E            pop     esi
77D6B120  |.  5D            pop     ebp
77D6B121  \.  C2 0C00       retn    0C

RETN 0C!!!!!!这是怎么回事啊~?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 152
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我是菜鸟,虽然来看雪几年了,但是没有什么成绩,真是丢人~
有时候磁到一个问题,自已没有办法解决,只好上论坛来问,但是论坛发贴,到有人回贴,这一天就算是完了,只好做罢~~

不知有没有高手,中手,低手也好,愿意加我的QQ:8505709  ,关键的时候,给予小弟些些指点就足够了~请放一万心,我绝对不会随便来打扰你的,只在确实需要时候问一下。
2009-4-12 18:53
0
雪    币: 452
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
进入USER32的领空了, 按 Ait+F9 返回程序领空吧!
2009-4-12 19:33
0
雪    币: 152
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
怪事情啊~~~

00401250  |.  FFD6          call    esi                           

这一句,是一个错的~~后面的DBG给的注释是GetDlgItemTextA

但是,实际上ESI里面的地址不是GetDlgItemTextA的地址,大家可以看:

77D6B094      90            nop
77D6B095      90            nop
77D6B096      90            nop
77D6B097 >    8BFF          mov     edi, edi
77D6B099  /.  55            push    ebp
77D6B09A  |.  8BEC          mov     ebp, esp
77D6B09C  |.  56            push    esi
77D6B09D  |.  8B75 10       mov     esi, dword ptr [ebp+10]
77D6B0A0  |.  6A 01         push    1
77D6B0A2  |.  56            push    esi
77D6B0A3  |.  FF75 0C       push    dword ptr [ebp+C]
77D6B0A6  |.  FF75 08       push    dword ptr [ebp+8]
77D6B0A9  |.  E8 634EFCFF   call    77D2FF11
77D6B0AE  |.  837D 0C 02    cmp     dword ptr [ebp+C], 2
77D6B0B2  |.  8945 10       mov     dword ptr [ebp+10], eax
77D6B0B5  |.  75 65         jnz     short 77D6B11C
77D6B0B7  |.  85C0          test    eax, eax
77D6B0B9  |.  74 61         je      short 77D6B11C
77D6B0BB  |.  3B35 481BD777 cmp     esi, dword ptr [77D71B48]
77D6B0C1  |.  8945 08       mov     dword ptr [ebp+8], eax
77D6B0C4  |.  74 2B         je      short 77D6B0F1
77D6B0C6  |.  6A 02         push    2                                              ; /BufSize = 2
77D6B0C8  |.  8D45 0C       lea     eax, dword ptr [ebp+C]                         ; |
77D6B0CB  |.  50            push    eax                                            ; |Buffer
77D6B0CC  |.  8BC6          mov     eax, esi                                       ; |USER32.77D6B0CC
77D6B0CE  |.  68 04100020   push    20001004                                       ; |InfoType = 20001004
77D6B0D3  |.  25 FFFF0000   and     eax, 0FFFF                                     ; |
77D6B0D8  |.  50            push    eax                                            ; |LocaleId
77D6B0D9  |.  FF15 6813D177 call    dword ptr [<&KERNEL32.GetLocaleInfoW>]         ; \GetLocaleInfoW
77D6B0DF  |.  85C0          test    eax, eax
77D6B0E1  |.  74 35         je      short 77D6B118
77D6B0E3  |.  8B45 0C       mov     eax, dword ptr [ebp+C]
77D6B0E6  |.  A3 4C1BD777   mov     dword ptr [77D71B4C], eax
77D6B0EB  |.  8935 481BD777 mov     dword ptr [77D71B48], esi
77D6B0F1  |>  66:8365 10 00 and     word ptr [ebp+10], 0
77D6B0F6  |.  6A 00         push    0                                              ; /pDefaultCharUsed = NULL
77D6B0F8  |.  6A 00         push    0                                              ; |pDefaultChar = NULL
77D6B0FA  |.  6A 01         push    1                                              ; |MultiByteCount = 1
77D6B0FC  |.  8D45 10       lea     eax, dword ptr [ebp+10]                        ; |
77D6B0FF  |.  50            push    eax                                            ; |MultiByteStr
77D6B100  |.  6A 01         push    1                                              ; |WideCharCount = 1
77D6B102  |.  8D45 08       lea     eax, dword ptr [ebp+8]                         ; |
77D6B105  |.  50            push    eax                                            ; |WideCharStr
77D6B106  |.  6A 00         push    0                                              ; |Options = 0
77D6B108  |.  FF35 4C1BD777 push    dword ptr [77D71B4C]                           ; |CodePage = CP_ACP
77D6B10E  |.  FF15 6013D177 call    dword ptr [<&KERNEL32.WideCharToMultiByte>]    ; \WideCharToMultiByte
77D6B114  |.  85C0          test    eax, eax
77D6B116  |.  75 04         jnz     short 77D6B11C
77D6B118  |>  8365 10 00    and     dword ptr [ebp+10], 0
77D6B11C  |>  8B45 10       mov     eax, dword ptr [ebp+10]
77D6B11F  |.  5E            pop     esi
77D6B120  |.  5D            pop     ebp
77D6B121  \.  C2 0C00       retn    0C
77D6B124      90            nop
77D6B125      90            nop
77D6B126      90            nop

如果是CALL到了第一句,77D6B097,自然是不会有问题,现在问题是,CALL进去后在

77D6B0CC  |.  8BC6          mov     eax, esi                                       ; |USER32.77D6B0CC

这个位置,那么肯定是会出错的~~`

问题是,怎么会CALL到中间去的呢?
没调试的时候怎么不会CALL到中间去呢~?
楼上的请看清楚了,不是这么简单啊~
2009-4-12 19:46
0
雪    币: 113
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
0040123F  |.  8B35 94404000 mov     esi, dword ptr [<&USER32.GetDlgI>;  USER32.GetDlgItemTextA

- -!~有你这样压的吗?这样压进去你就已经压错地址啦,. mov     esi,<jmp.&USER32.GetDlgItemTextA>这样的自动重定位才是正道...明白了吧?
2009-4-16 00:32
0
游客
登录 | 注册 方可回帖
返回
//