详细注释每一行汇编 0000000140888290 ; __int64 __fastcall NtCreateDebugObject(PHANDLE DebugHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, ULONG Flags)
0000000140888290 NtCreateDebugObject proc near ; DATA XREF: .pdata:000000014011CF74↑o
0000000140888290 ; PAGE:000000014098C2E8↓o
0000000140888290 var_68 = qword ptr -68h
0000000140888290 ObjectBodySize = dword ptr -60h
0000000140888290 var_58 = qword ptr -58h
0000000140888290 var_50 = dword ptr -50h
0000000140888290 Object = qword ptr -48h
0000000140888290 var_40 = qword ptr -40h
0000000140888290 DebugObject = qword ptr -30h
0000000140888290 Handle = qword ptr -28h
0000000140888290 var_8 = byte ptr -8
0000000140888290 mov rax, rsp
0000000140888293 mov [rax+8], rbx
0000000140888297 mov [rax+10h], rsi
000000014088829B mov [rax+18h], rdi
000000014088829F push r14
00000001408882A1 sub rsp, 80h ; Integer Subtraction
00000001408882A8 mov esi, r9d
00000001408882AB mov r14d, edx
00000001408882AE mov rdi, rcx
00000001408882B1 and qword ptr [rax-28h], 0 ; Logical AND
00000001408882B6 and qword ptr [rax-30h], 0 ; Logical AND
00000001408882BB mov rax, gs:188h
00000001408882C4 mov r10b, [rax+232h]
00000001408882CB loc_1408882CB: ; DATA XREF: .rdata:00000001400B5514↑o
00000001408882CB test r10b, r10b ; Logical Compare
00000001408882CE jz short loc_1408882E7 ; Jump if Zero (ZF=1)
00000001408882D0 mov rcx, 7FFFFFFF0000h
00000001408882DA cmp rdi, rcx ; Compare Two Operands
00000001408882DD cmovb rcx, rdi ; Move if Below (CF=1)
00000001408882E1 mov rax, [rcx]
00000001408882E4 mov [rcx], rax
00000001408882E7 loc_1408882E7: ; CODE XREF: NtCreateDebugObject+3E↑j
00000001408882E7 and qword ptr [rdi], 0 ; Logical AND
00000001408882EB loc_1408882EB: ; DATA XREF: .rdata:00000001400B5514↑o
00000001408882EB test esi, 0FFFFFFFEh ; Logical Compare
00000001408882F1 jz short loc_1408882FD ; Jump if Zero (ZF=1)
00000001408882F3 mov eax, 0C000000Dh
00000001408882F8 jmp loc_1408883FE ; Jump
00000001408882FD ; ---------------------------------------------------------------------------
00000001408882FD loc_1408882FD: ; CODE XREF: NtCreateDebugObject+61↑j
00000001408882FD mov rdx, cs:DbgkDebugObjectType ; ObjectType
0000000140888304 and [rsp+88h+var_40], 0 ; Logical AND
000000014088830A lea rax, [rsp+88h+DebugObject] ; Load Effective Address
000000014088830F mov [rsp+88h+Object], rax ; Object
0000000140888314 and [rsp+88h+var_50], 0 ; Logical AND
0000000140888319 and dword ptr [rsp+88h+var_58], 0 ; Logical AND
000000014088831E mov [rsp+88h+ObjectBodySize], 68h ; 'h' ; ObjectBodySize
0000000140888326 mov r9b, r10b ; OwnershipMode
0000000140888329 mov cl, r10b ; ProbeMode
000000014088832C call ObCreateObjectEx ; Call Procedure
0000000140888331 test eax, eax ; Logical Compare
0000000140888333 js loc_1408883FE ; Jump if Sign (SF=1)
0000000140888339 mov rbx, [rsp+88h+DebugObject]
000000014088833E mov dword ptr [rbx+18h], 1
0000000140888345 and qword ptr [rbx+20h], 0 ; Logical AND
000000014088834A and dword ptr [rbx+28h], 0 ; Logical AND
000000014088834E lea rcx, [rbx+30h] ; Event
0000000140888352 xor r8d, r8d ; State
0000000140888355 lea edx, [r8+1] ; Type
0000000140888359 call KeInitializeEvent ; Call Procedure
000000014088835E lea rax, [rbx+50h] ; Load Effective Address
0000000140888362 mov [rax+8], rax
0000000140888366 mov [rax], rax
0000000140888369 xor r8d, r8d ; State
000000014088836C xor edx, edx ; Type
000000014088836E mov rcx, rbx ; Event
0000000140888371 call KeInitializeEvent ; Call Procedure
0000000140888376 test sil, 1 ; Logical Compare
000000014088837A jz short loc_140888385 ; Jump if Zero (ZF=1)
000000014088837C mov dword ptr [rbx+60h], 2
0000000140888383 jmp short loc_140888389 ; Jump
0000000140888385 ; ---------------------------------------------------------------------------
0000000140888385 loc_140888385: ; CODE XREF: NtCreateDebugObject+EA↑j
0000000140888385 and dword ptr [rbx+60h], 0 ; Logical AND
0000000140888389 loc_140888389: ; CODE XREF: NtCreateDebugObject+F3↑j
0000000140888389 mov rax, gs:188h
0000000140888392 mov rcx, [rax+0B8h]
0000000140888399 mov rax, [rcx+580h]
00000001408883A0 test rax, rax ; Logical Compare
00000001408883A3 jz short loc_1408883C1 ; Jump if Zero (ZF=1)
00000001408883A5 movzx eax, word ptr [rax+8] ; Move with Zero-Extend
00000001408883A9 mov ecx, 14Ch
00000001408883AE cmp ax, cx ; Compare Two Operands
00000001408883B1 jz short loc_1408883BD ; Jump if Zero (ZF=1)
00000001408883B3 mov ecx, 1C4h
00000001408883B8 cmp ax, cx ; Compare Two Operands
00000001408883BB jnz short loc_1408883C1 ; Jump if Not Zero (ZF=0)
00000001408883BD loc_1408883BD: ; CODE XREF: NtCreateDebugObject+121↑j
00000001408883BD or dword ptr [rbx+60h], 4 ; Logical Inclusive OR
00000001408883C1 loc_1408883C1: ; CODE XREF: NtCreateDebugObject+113↑j
00000001408883C1 ; NtCreateDebugObject+12B↑j
00000001408883C1 lea rax, [rsp+88h+Handle] ; Load Effective Address
00000001408883C6 mov [rsp+88h+var_58], rax
00000001408883CB and qword ptr [rsp+88h+ObjectBodySize], 0 ; Logical AND
00000001408883D1 and dword ptr [rsp+88h+var_68], 0 ; Logical AND
00000001408883D6 xor r9d, r9d ; Logical Exclusive OR
00000001408883D9 mov r8d, r14d
00000001408883DC xor edx, edx ; Logical Exclusive OR
00000001408883DE mov rcx, [rsp+88h+DebugObject]
00000001408883E3 call ObInsertObjectEx ; Call Procedure
00000001408883E8 mov ecx, eax
00000001408883EA test eax, eax ; Logical Compare
00000001408883EC js short loc_1408883FE ; Jump if Sign (SF=1)
00000001408883EE loc_1408883EE: ; DATA XREF: .rdata:00000001400B5524↑o
00000001408883EE mov rax, [rsp+88h+Handle]
00000001408883F3 mov [rdi], rax
00000001408883F6 jmp short loc_1408883FA ; Jump
00000001408883F8 ; ---------------------------------------------------------------------------
00000001408883F8 loc_1408883F8: ; DATA XREF: .rdata:00000001400B5524↑o
00000001408883F8 mov ecx, eax
00000001408883FA loc_1408883FA: ; CODE XREF: NtCreateDebugObject+166↑j
00000001408883FA mov eax, ecx
00000001408883FC jmp short $+2 ; Jump
00000001408883FE ; ---------------------------------------------------------------------------
00000001408883FE loc_1408883FE: ; CODE XREF: NtCreateDebugObject+68↑j
00000001408883FE ; NtCreateDebugObject+A3↑j ...
00000001408883FE lea r11, [rsp+88h+var_8] ; Load Effective Address
0000000140888406 mov rbx, [r11+10h]
000000014088840A mov rsi, [r11+18h]
000000014088840E mov rdi, [r11+20h]
0000000140888412 mov rsp, r11
0000000140888415 pop r14
0000000140888417 retn ; Return Near from Procedure
0000000140888417 ; ---------------------------------------------------------------------------
0000000140888418 db 0CCh
0000000140888419 ; ---------------------------------------------------------------------------
0000000140888419 NtCreateDebugObject$filt$1_0: ; DATA XREF: .rdata:00000001400B5514↑o
0000000140888419 ; .pdata:000000014011CF74↑o ...
0000000140888419 push rbp
000000014088841B sub rsp, 50h ; Integer Subtraction
000000014088841F mov rbp, rdx
0000000140888422 mov rax, gs:188h
000000014088842B mov [rbp+70h], rax
000000014088842F mov rax, [rbp+70h]
0000000140888433 mov cl, [rax+232h]
0000000140888439 mov [rbp+51h], cl
000000014088843C mov cl, [rbp+51h]
000000014088843F xor eax, eax ; Logical Exclusive OR
0000000140888441 test cl, cl ; Logical Compare
0000000140888443 setnz al ; Set Byte if Not Zero (ZF=0)
0000000140888446 add rsp, 50h ; Add
000000014088844A pop rbp
000000014088844B retn ; Return Near from Procedure
000000014088844B ; ---------------------------------------------------------------------------
000000014088844C db 0CCh
000000014088844D ; ---------------------------------------------------------------------------
000000014088844D NtCreateDebugObject$filt$0: ; DATA XREF: .rdata:00000001400B5524↑o
000000014088844D ; .pdata:000000014011CF80↑o ...
000000014088844D push rbp
000000014088844F sub rsp, 50h ; Integer Subtraction
0000000140888453 mov rbp, rdx
0000000140888456 mov rax, gs:188h
000000014088845F mov [rbp+68h], rax
0000000140888463 mov rax, [rbp+68h]
0000000140888467 mov cl, [rax+232h]
000000014088846D mov [rbp+50h], cl
0000000140888470 mov cl, [rbp+50h]
0000000140888473 xor eax, eax ; Logical Exclusive OR
0000000140888475 test cl, cl ; Logical Compare
0000000140888477 setnz al ; Set Byte if Not Zero (ZF=0)
000000014088847A add rsp, 50h ; Add
000000014088847E pop rbp
000000014088847F retn ; Return Near from Procedure
000000014088847F ; ---------------------------------------------------------------------------
0000000140888480 db 0CCh
0000000140888480 NtCreateDebugObject endp
最新发布