assert_unhandled_case on ObReferenceObjectByHandle.

This commit is contained in:
Ben Vanik 2015-02-02 22:33:15 -08:00
parent 05f008d6ce
commit c33613b2f8
2 changed files with 6 additions and 1 deletions

View File

@ -508,6 +508,7 @@ uint64_t ResolveFunctionAddress(void* raw_context, uint64_t target_address) {
}; };
#pragma pack(pop) #pragma pack(pop)
static_assert_size(Asm, kICSlotSize); static_assert_size(Asm, kICSlotSize);
// TODO(benvanik): quick check table is full (so we don't have to enum slots)
// The return address points to ReloadRCX work after the call. // The return address points to ReloadRCX work after the call.
// To get the top of the table, look back a ways. // To get the top of the table, look back a ways.
uint64_t table_start = return_address - 12 - kICSlotSize * kICSlotCount; uint64_t table_start = return_address - 12 - kICSlotSize * kICSlotCount;

View File

@ -35,13 +35,17 @@ SHIM_CALL ObReferenceObjectByHandle_shim(PPCContext* ppc_state,
// TODO(benvanik): verify type with object_type_ptr // TODO(benvanik): verify type with object_type_ptr
// TODO(benvanik): get native value, if supported. // TODO(benvanik): get native value, if supported.
uint32_t native_ptr = 0xDEADF00D; uint32_t native_ptr;
switch (object_type_ptr) { switch (object_type_ptr) {
case 0xD01BBEEF: // ExThreadObjectType case 0xD01BBEEF: // ExThreadObjectType
{ {
XThread* thread = (XThread*)object; XThread* thread = (XThread*)object;
native_ptr = thread->thread_state(); native_ptr = thread->thread_state();
} break; } break;
default:
assert_unhandled_case(object_type_ptr);
native_ptr = 0xDEADF00D;
break;
} }
if (out_object_ptr) { if (out_object_ptr) {