MCPcopy Index your code
hub / github.com/rabbitstack/fibratus / TestThreadFilter

Function TestThreadFilter

pkg/filter/filter_test.go:411–613  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

409}
410
411func TestThreadFilter(t *testing.T) {
412 pars := event.Params{
413 params.ProcessID: {Name: params.ProcessID, Type: params.PID, Value: uint32(os.Getpid())},
414 params.ThreadID: {Name: params.ThreadID, Type: params.TID, Value: uint32(3453)},
415 params.BasePrio: {Name: params.BasePrio, Type: params.Uint8, Value: uint8(13)},
416 params.StartAddress: {Name: params.StartAddress, Type: params.Address, Value: uint64(140729524944768)},
417 params.TEB: {Name: params.TEB, Type: params.Address, Value: uint64(614994620416)},
418 params.IOPrio: {Name: params.IOPrio, Type: params.Uint8, Value: uint8(2)},
419 params.KstackBase: {Name: params.KstackBase, Type: params.Address, Value: uint64(18446677035730165760)},
420 params.KstackLimit: {Name: params.KstackLimit, Type: params.Address, Value: uint64(18446677035730137088)},
421 params.PagePrio: {Name: params.PagePrio, Type: params.Uint8, Value: uint8(5)},
422 params.UstackBase: {Name: params.UstackBase, Type: params.Address, Value: uint64(86376448)},
423 params.UstackLimit: {Name: params.UstackLimit, Type: params.Address, Value: uint64(86372352)},
424 params.StartAddressSymbol: {Name: params.StartAddressSymbol, Type: params.UnicodeString, Value: "LoadModule"},
425 params.StartAddressModule: {Name: params.StartAddressModule, Type: params.UnicodeString, Value: "C:\\Windows\\System32\\kernel32.dll"},
426 }
427 evt := &event.Event{
428 Type: event.CreateThread,
429 Params: pars,
430 Name: "CreateThread",
431 PID: windows.GetCurrentProcessId(),
432 Category: event.Thread,
433 PS: &pstypes.PS{
434 Name: "svchost.exe",
435 Envs: map[string]string{"ALLUSERSPROFILE": "C:\\ProgramData", "OS": "Windows_NT", "ProgramFiles(x86)": "C:\\Program Files (x86)"},
436 Modules: []pstypes.Module{
437 {Name: "C:\\Windows\\System32\\kernel32.dll", Size: 2312354, Checksum: 23123343, BaseAddress: va.Address(0x7ffb5c1d0396), DefaultBaseAddress: va.Address(0x7ffb5c1d0396)},
438 {Name: "C:\\Windows\\System32\\user32.dll", Size: 32212354, Checksum: 33123343, BaseAddress: va.Address(0x7ffb313953b2), DefaultBaseAddress: va.Address(0x7ffb313953b2)},
439 {Name: "C:\\Program Files\\JetBrains\\GoLand 2021.2.3\\jbr\\bin\\java.dll", Size: 32212354, Checksum: 33123343, BaseAddress: va.Address(0x7ffb3138592e), DefaultBaseAddress: va.Address(0x7ffb3138592e)},
440 },
441 },
442 }
443
444 // append the module signature
445 cert := &sys.Cert{Subject: "US, Washington, Redmond, Microsoft Corporation, Microsoft Windows", Issuer: "US, Washington, Redmond, Microsoft Corporation, Microsoft Windows Production PCA 2011"}
446 signature.GetSignatures().PutSignature(0x7ffb3138592e, &signature.Signature{Filename: "C:\\Program Files\\JetBrains\\GoLand 2021.2.3\\jbr\\bin\\java.dll", Level: 4, Type: 1, Cert: cert})
447
448 // simulate unbacked RWX frame
449 base, err := windows.VirtualAlloc(0, 1024, windows.MEM_COMMIT|windows.MEM_RESERVE, windows.PAGE_EXECUTE_READWRITE)
450 require.NoError(t, err)
451 defer func() {
452 _ = windows.VirtualFree(base, 1024, windows.MEM_DECOMMIT)
453 }()
454 insns := []byte{
455 0x4C, 0x8B, 0xD1, // mov r10, rcx
456 0xB8, 0x55, 0x0, 0x0, 0x0, // mov eax, 55h
457 0xF6, 0x04, 0x25, 0x08, 0x03, 0xFE, 0x7F, 0x01, // test byte ptr[7FFE0308h]
458 0x0F, 0x05, // syscall
459 0xC3, // ret
460 }
461 require.NoError(t, windows.WriteProcessMemory(windows.CurrentProcess(), base, &insns[0], uintptr(len(insns)), nil))
462
463 evt.Callstack.Init(8)
464 evt.Callstack.PushFrame(callstack.Frame{PID: evt.PID, Addr: 0x2638e59e0a5, Offset: 0, Symbol: "?", Module: "unbacked"})
465 evt.Callstack.PushFrame(callstack.Frame{PID: evt.PID, Addr: va.Address(base), Offset: 0, Symbol: "?", Module: "unbacked"})
466 evt.Callstack.PushFrame(callstack.Frame{PID: evt.PID, Addr: 0x7ffb313853b2, Offset: 0x10a, Symbol: "Java_java_lang_ProcessImpl_create", Module: "C:\\Program Files\\JetBrains\\GoLand 2021.2.3\\jbr\\bin\\java.dll"})
467 evt.Callstack.PushFrame(callstack.Frame{PID: evt.PID, Addr: 0x7ffb3138592e, ModuleAddress: 0x7ffb3138592e, Offset: 0x3a2, Symbol: "Java_java_lang_ProcessImpl_waitForTimeoutInterruptibly", Module: "C:\\Program Files\\JetBrains\\GoLand 2021.2.3\\jbr\\bin\\java.dll"})
468 evt.Callstack.PushFrame(callstack.Frame{PID: evt.PID, Addr: 0x7ffb5d8e61f4, Offset: 0x54, Symbol: "CreateProcessW", Module: "C:\\WINDOWS\\System32\\KERNEL32.DLL"})

Callers

nothing calls this directly

Calls 10

AddressTypeAlias · 0.92
GetSignaturesFunction · 0.92
IsProcessRunningFunction · 0.92
PutSignatureMethod · 0.80
PushFrameMethod · 0.80
NewFunction · 0.70
getNtdllAddressFunction · 0.70
CompileMethod · 0.65
RunMethod · 0.65
InitMethod · 0.45

Tested by

no test coverage detected