变量 var_4 填充值 -1

逆向工程 艾达 拆卸 C++
2021-06-28 09:07:07

谁能给我解释一下,为什么这行代码在代码的每一jmp部分之前或结尾都有标签。这行代码是做什么的?

mov     [ebp+var_4], 0FFFFFFFFh

这是WinMain使用C++。我使用了try/catch。

.text:00411260                 push    ebp
.text:00411261                 mov     ebp, esp
.text:00411263                 push    0FFFFFFFFh
.text:00411265                 push    offset unk_414FC8
.text:0041126A                 push    offset loc_411050
.text:0041126F                 mov     eax, large fs:0
.text:00411275                 push    eax
.text:00411276                 mov     large fs:0, esp
.text:0041127D                 add     esp, 0FFFFFFA0h
.text:00411280                 push    ebx
.text:00411281                 push    esi             ; uType
.text:00411282                 push    edi             ; uType
.text:00411283                 mov     [ebp+var_18], esp
.text:00411286                 mov     [ebp+var_1C], 64h
.text:0041128D                 mov     [ebp+var_20], 96h
.text:00411294                 mov     [ebp+var_4], 0
.text:0041129B                 mov     eax, [ebp+var_1C]
.text:0041129E                 add     eax, [ebp+var_20]
.text:004112A1                 mov     [ebp+var_24], eax
.text:004112A4                 int     3               ; Trap to Debugger
.text:004112A5                 mov     [ebp+var_4], 0FFFFFFFFh
.text:004112AC                 jmp     short loc_4112D2
.text:004112AE ; ---------------------------------------------------------------------------
.text:004112AE                 mov     eax, 1
.text:004112B3                 retn
.text:004112B4 ; ---------------------------------------------------------------------------
.text:004112B4                 mov     esp, [ebp-18h]
.text:004112B7                 push    0
.text:004112B9                 push    offset Caption  ; "Error1"
.text:004112BE                 push    offset Caption  ; "Error1"
.text:004112C3                 push    0               ; hWnd
.text:004112C5                 call    ds:__imp__MessageBoxA@16 ; MessageBoxA(x,x,x,x)
.text:004112CB                 mov     [ebp+var_4], 0FFFFFFFFh
.text:004112D2
.text:004112D2 loc_4112D2:                             ; CODE XREF: WinMain+4Cj
.text:004112D2                 mov     [ebp+var_28], 64h
.text:004112D9                 mov     [ebp+var_2C], 96h
.text:004112E0                 mov     [ebp+var_4], 1
.text:004112E7                 mov     eax, [ebp+var_28]
.text:004112EA                 add     eax, [ebp+var_2C]
.text:004112ED                 mov     [ebp+var_30], eax
.text:004112F0                 mov     eax, [ebp+var_30]
.text:004112F3                 cdq
.text:004112F4                 xor     ecx, ecx
.text:004112F6                 idiv    ecx
.text:004112F8                 mov     [ebp+var_30], eax
.text:004112FB                 mov     [ebp+var_4], 0FFFFFFFFh
.text:00411302                 jmp     short loc_411328
.text:00411304 ; ---------------------------------------------------------------------------
.text:00411304                 mov     eax, 1
.text:00411309                 retn
.text:0041130A ; ---------------------------------------------------------------------------
.text:0041130A                 mov     esp, [ebp-18h]
.text:0041130D                 push    0
.text:0041130F                 push    offset Text     ; "Error2"
.text:00411314                 push    offset Text     ; "Error2"
.text:00411319                 push    0               ; hWnd
.text:0041131B                 call    ds:__imp__MessageBoxA@16 ; MessageBoxA(x,x,x,x)
.text:00411321                 mov     [ebp+var_4], 0FFFFFFFFh
.text:00411328
.text:00411328 loc_411328:                             ; CODE XREF: WinMain+A2j
.text:00411328                 xor     eax, eax
.text:0041132A                 mov     ecx, [ebp+var_10]
.text:0041132D                 mov     large fs:0, ecx
.text:00411334                 pop     edi
.text:00411335                 pop     esi
.text:00411336                 pop     ebx
.text:00411337                 mov     esp, ebp
.text:00411339                 pop     ebp
.text:0041133A                 retn    10h
.text:0041133A WinMain         endp
1个回答

在用 Visual C++ 编译的二进制文件中,使用 SEH(结构化异常处理)的函数通常使用var_4( [ebp-4]) 作为尝试级别值(指定当前 SEH 范围块的值)。

值 0FFFFFFFFh(或 -1)用于最外层的全局函数作用域(即在任何__try之前和之后)。

有关更多信息,请查看我的 OpenRCE 文章