坚持搞清楚汇编功能的作用

时间:2014-07-12 19:43:20

标签: function assembly analysis

我知道这个问题有点笼统,但我一直在查看一个大型汇编文件,直到调用此函数为止:

CPU Disasm
Address   Hex dump          Command                                 Comments
004149E0  /$  55            PUSH EBP
004149E1  |.  89E5          MOV EBP,ESP
004149E3  |.  83EC 28       SUB ESP,28
004149E6  |.  895D F4       MOV DWORD PTR SS:[LOCAL.3],EBX
004149E9  |.  8B45 08       MOV EAX,DWORD PTR SS:[ARG.1]
004149EC  |.  8975 F8       MOV DWORD PTR SS:[LOCAL.2],ESI
004149EF  |.  897D FC       MOV DWORD PTR SS:[LOCAL.1],EDI
004149F2  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004149F4  |.  8945 E0       MOV DWORD PTR SS:[LOCAL.8],EAX
004149F7  |.  8B40 F4       MOV EAX,DWORD PTR DS:[EAX-0C]
004149FA  |.  8945 E4       MOV DWORD PTR SS:[LOCAL.7],EAX
004149FD  |.  8945 F0       MOV DWORD PTR SS:[LOCAL.4],EAX
00414A00  |.  8B45 0C       MOV EAX,DWORD PTR SS:[ARG.2]
00414A03  |.  890424        MOV DWORD PTR SS:[LOCAL.10],EAX          ;string => [ARG.2]
00414A06  |.  E8 35C9FFFF   CALL <JMP.&msvcrt.strlen>                ;MSVCRT.strlen
00414A0B  |.  8945 EC       MOV DWORD PTR SS:[LOCAL.5],EAX
00414A0E  |.  89C3          MOV EBX,EAX
00414A10  |.  8D45 EC       LEA EAX,[LOCAL.5]
00414A13  |.  3B5D E4       CMP EBX,DWORD PTR SS:[LOCAL.7]
00414A16  |.  72 03         JB SHORT 00414A1B
00414A18  |.  8D45 F0       LEA EAX,[LOCAL.4]
00414A1B  |>  FC            CLD
00414A1C  |.  8B08          MOV ECX,DWORD PTR DS:[EAX]
00414A1E  |.  8B75 E0       MOV ESI,DWORD PTR SS:[LOCAL.8]
00414A21  |.  8B7D 0C       MOV EDI,DWORD PTR SS:[ARG.2]
00414A24  |.  39C9          CMP ECX,ECX
00414A26  |.  F3:A6         REPE CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
00414A28  |.  0F92C0        SETB AL
00414A2B  |.  0F97C2        SETA DL
00414A2E  |.  28C2          SUB DL,AL
00414A30  |.  0FBEC2        MOVSX EAX,DL
00414A33  |.  85C0          TEST EAX,EAX
00414A35  |.  75 05         JNZ SHORT 00414A3C
00414A37  |.  8B45 E4       MOV EAX,DWORD PTR SS:[LOCAL.7]
00414A3A  |.  29D8          SUB EAX,EBX
00414A3C  |>  8B5D F4       MOV EBX,DWORD PTR SS:[LOCAL.3]
00414A3F  |.  8B75 F8       MOV ESI,DWORD PTR SS:[LOCAL.2]
00414A42  |.  8B7D FC       MOV EDI,DWORD PTR SS:[LOCAL.1]
00414A45  |.  89EC          MOV ESP,EBP
00414A47  |.  5D            POP EBP
00414A48  \.  C3            RETN

这个功能真的给了我一个艰难的时间,如果你们有任何见解或者可以让我对它发生的事情大致了解我真的很感激。

我猜它可能与被检查的字符串的大小有关(可能是10个字符的长度?)同样来自我所看到的(再次,不确定)AL和EAX是那些这段代码我真的很担心。

如果需要有关此部分的更多信息,请不要犹豫,问我。

1 个答案:

答案 0 :(得分:1)

好吧,未经优化的x86(不是x86-64)程序集非常难看(并且在启动的英特尔语法中......) 无论如何,似乎这个函数接受字符串的strlen(),然后获取此strlen中较小的一个以及在数组或结构中传递的参数,并将其用作strncmp()的长度参数。返回strncmp的结果。