[Memory] Add HostToGuestVirtual and use it in a couple of places
This commit is contained in:
@@ -314,11 +314,11 @@ X_STATUS UserModule::GetOptHeader(xex2_header_keys key,
|
||||
if (!header) {
|
||||
return X_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
return GetOptHeader(memory()->virtual_membase(), header, key,
|
||||
out_header_guest_ptr);
|
||||
return GetOptHeader(memory(), header, key, out_header_guest_ptr);
|
||||
}
|
||||
|
||||
X_STATUS UserModule::GetOptHeader(uint8_t* membase, const xex2_header* header,
|
||||
X_STATUS UserModule::GetOptHeader(const Memory* memory,
|
||||
const xex2_header* header,
|
||||
xex2_header_keys key,
|
||||
uint32_t* out_header_guest_ptr) {
|
||||
assert_not_null(out_header_guest_ptr);
|
||||
@@ -337,14 +337,11 @@ X_STATUS UserModule::GetOptHeader(uint8_t* membase, const xex2_header* header,
|
||||
break;
|
||||
case 0x01:
|
||||
// Return pointer to data stored in header value.
|
||||
field_value = static_cast<uint32_t>(
|
||||
reinterpret_cast<const uint8_t*>(&opt_header.value) - membase);
|
||||
field_value = memory->HostToGuestVirtual(&opt_header.value);
|
||||
break;
|
||||
default:
|
||||
// Data stored at offset to header.
|
||||
field_value = static_cast<uint32_t>(
|
||||
reinterpret_cast<const uint8_t*>(header) - membase) +
|
||||
opt_header.offset;
|
||||
field_value = memory->HostToGuestVirtual(header) + opt_header.offset;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -81,7 +81,7 @@ class UserModule : public XModule {
|
||||
|
||||
// Get optional header that can safely be returned to guest code.
|
||||
X_STATUS GetOptHeader(xex2_header_keys key, uint32_t* out_header_guest_ptr);
|
||||
static X_STATUS GetOptHeader(uint8_t* membase, const xex2_header* header,
|
||||
static X_STATUS GetOptHeader(const Memory* memory, const xex2_header* header,
|
||||
xex2_header_keys key,
|
||||
uint32_t* out_header_guest_ptr);
|
||||
|
||||
|
||||
@@ -341,8 +341,8 @@ pointer_result_t RtlImageXexHeaderField(pointer_t<xex2_header> xex_header,
|
||||
uint32_t field_value = 0;
|
||||
uint32_t field = field_dword; // VS acts weird going from dword_t -> enum
|
||||
|
||||
UserModule::GetOptHeader(kernel_memory()->virtual_membase(), xex_header,
|
||||
xex2_header_keys(field), &field_value);
|
||||
UserModule::GetOptHeader(kernel_memory(), xex_header, xex2_header_keys(field),
|
||||
&field_value);
|
||||
|
||||
return field_value;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user