strace: Add printing for the address-spec enum.
This commit is contained in:
@@ -28,7 +28,30 @@ static const FlagsTypeHandler::FlagInfo kAreaProtectionFlagInfos[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct enum_info {
|
||||||
|
unsigned int index;
|
||||||
|
const char *name;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define ENUM_INFO_ENTRY(name) \
|
||||||
|
{ name, #name }
|
||||||
|
|
||||||
|
static const enum_info kAddressSpecs[] = {
|
||||||
|
ENUM_INFO_ENTRY(B_ANY_ADDRESS),
|
||||||
|
ENUM_INFO_ENTRY(B_EXACT_ADDRESS),
|
||||||
|
ENUM_INFO_ENTRY(B_BASE_ADDRESS),
|
||||||
|
ENUM_INFO_ENTRY(B_CLONE_ADDRESS),
|
||||||
|
ENUM_INFO_ENTRY(B_ANY_KERNEL_ADDRESS),
|
||||||
|
ENUM_INFO_ENTRY(B_RANDOMIZED_ANY_ADDRESS),
|
||||||
|
ENUM_INFO_ENTRY(B_RANDOMIZED_BASE_ADDRESS),
|
||||||
|
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static FlagsTypeHandler::FlagsList kAreaProtectionFlags;
|
static FlagsTypeHandler::FlagsList kAreaProtectionFlags;
|
||||||
|
static EnumTypeHandler::EnumMap kAddressSpecsMap;
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
patch_area()
|
patch_area()
|
||||||
@@ -36,19 +59,33 @@ patch_area()
|
|||||||
for (int i = 0; kAreaProtectionFlagInfos[i].name != NULL; i++) {
|
for (int i = 0; kAreaProtectionFlagInfos[i].name != NULL; i++) {
|
||||||
kAreaProtectionFlags.push_back(kAreaProtectionFlagInfos[i]);
|
kAreaProtectionFlags.push_back(kAreaProtectionFlagInfos[i]);
|
||||||
}
|
}
|
||||||
|
for (int i = 0; kAddressSpecs[i].name != NULL; i++) {
|
||||||
|
kAddressSpecsMap[kAddressSpecs[i].index] = kAddressSpecs[i].name;
|
||||||
|
}
|
||||||
|
|
||||||
Syscall *create = get_syscall("_kern_create_area");
|
Syscall *create = get_syscall("_kern_create_area");
|
||||||
create->GetParameter("address")->SetInOut(true);
|
create->GetParameter("address")->SetInOut(true);
|
||||||
|
create->GetParameter("addressSpec")->SetHandler(
|
||||||
|
new EnumTypeHandler(kAddressSpecsMap));
|
||||||
create->GetParameter("protection")->SetHandler(
|
create->GetParameter("protection")->SetHandler(
|
||||||
new FlagsTypeHandler(kAreaProtectionFlags));
|
new FlagsTypeHandler(kAreaProtectionFlags));
|
||||||
|
|
||||||
|
Syscall *transfer = get_syscall("_kern_transfer_area");
|
||||||
|
transfer->GetParameter("_address")->SetInOut(true);
|
||||||
|
transfer->GetParameter("addressSpec")->SetHandler(
|
||||||
|
new EnumTypeHandler(kAddressSpecsMap));
|
||||||
|
|
||||||
Syscall *clone = get_syscall("_kern_clone_area");
|
Syscall *clone = get_syscall("_kern_clone_area");
|
||||||
clone->GetParameter("_address")->SetInOut(true);
|
clone->GetParameter("_address")->SetInOut(true);
|
||||||
|
clone->GetParameter("addressSpec")->SetHandler(
|
||||||
|
new EnumTypeHandler(kAddressSpecsMap));
|
||||||
clone->GetParameter("protection")->SetHandler(
|
clone->GetParameter("protection")->SetHandler(
|
||||||
new FlagsTypeHandler(kAreaProtectionFlags));
|
new FlagsTypeHandler(kAreaProtectionFlags));
|
||||||
|
|
||||||
Syscall *reserve_address_range = get_syscall("_kern_reserve_address_range");
|
Syscall *reserve_address_range = get_syscall("_kern_reserve_address_range");
|
||||||
reserve_address_range->GetParameter("_address")->SetInOut(true);
|
reserve_address_range->GetParameter("_address")->SetInOut(true);
|
||||||
|
reserve_address_range->GetParameter("addressSpec")->SetHandler(
|
||||||
|
new EnumTypeHandler(kAddressSpecsMap));
|
||||||
|
|
||||||
Syscall *set_area_protection = get_syscall("_kern_set_area_protection");
|
Syscall *set_area_protection = get_syscall("_kern_set_area_protection");
|
||||||
set_area_protection->GetParameter("newProtection")->SetHandler(
|
set_area_protection->GetParameter("newProtection")->SetHandler(
|
||||||
@@ -56,6 +93,8 @@ patch_area()
|
|||||||
|
|
||||||
Syscall *map_file = get_syscall("_kern_map_file");
|
Syscall *map_file = get_syscall("_kern_map_file");
|
||||||
map_file->GetParameter("address")->SetInOut(true);
|
map_file->GetParameter("address")->SetInOut(true);
|
||||||
|
map_file->GetParameter("addressSpec")->SetHandler(
|
||||||
|
new EnumTypeHandler(kAddressSpecsMap));
|
||||||
map_file->GetParameter("protection")->SetHandler(
|
map_file->GetParameter("protection")->SetHandler(
|
||||||
new FlagsTypeHandler(kAreaProtectionFlags));
|
new FlagsTypeHandler(kAreaProtectionFlags));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user