mirror of
https://github.com/mandiant/capa.git
synced 2025-12-12 15:49:46 -08:00
dotnet: remove duplicative validate_has_dotnet helper
This commit is contained in:
@@ -107,15 +107,8 @@ class DnUnmanagedMethod:
|
||||
return f"{module}.{method}"
|
||||
|
||||
|
||||
def validate_has_dotnet(pe: dnfile.dnPE):
|
||||
assert pe.net is not None
|
||||
assert pe.net.mdtables is not None
|
||||
assert pe.net.Flags is not None
|
||||
|
||||
|
||||
def resolve_dotnet_token(pe: dnfile.dnPE, token: Token) -> Any:
|
||||
"""map generic token to string or table row"""
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.mdtables is not None
|
||||
|
||||
@@ -153,7 +146,6 @@ def read_dotnet_method_body(pe: dnfile.dnPE, row: dnfile.mdtable.MethodDefRow) -
|
||||
|
||||
def read_dotnet_user_string(pe: dnfile.dnPE, token: StringToken) -> Optional[str]:
|
||||
"""read user string from #US stream"""
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.user_strings is not None
|
||||
|
||||
@@ -183,7 +175,6 @@ def get_dotnet_managed_imports(pe: dnfile.dnPE) -> Iterator[DnType]:
|
||||
TypeName (index into String heap)
|
||||
TypeNamespace (index into String heap)
|
||||
"""
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.mdtables is not None
|
||||
assert pe.net.mdtables.MemberRef is not None
|
||||
@@ -277,7 +268,6 @@ def get_dotnet_properties(pe: dnfile.dnPE) -> Iterator[DnType]:
|
||||
|
||||
def get_dotnet_managed_method_bodies(pe: dnfile.dnPE) -> Iterator[Tuple[int, CilMethodBody]]:
|
||||
"""get managed methods from MethodDef table"""
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.mdtables is not None
|
||||
assert pe.net.mdtables.MethodDef is not None
|
||||
@@ -331,7 +321,6 @@ def calculate_dotnet_token_value(table: int, rid: int) -> int:
|
||||
|
||||
|
||||
def is_dotnet_table_valid(pe: dnfile.dnPE, table_name: str) -> bool:
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.mdtables is not None
|
||||
|
||||
@@ -339,7 +328,6 @@ def is_dotnet_table_valid(pe: dnfile.dnPE, table_name: str) -> bool:
|
||||
|
||||
|
||||
def is_dotnet_mixed_mode(pe: dnfile.dnPE) -> bool:
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.Flags is not None
|
||||
|
||||
@@ -347,7 +335,6 @@ def is_dotnet_mixed_mode(pe: dnfile.dnPE) -> bool:
|
||||
|
||||
|
||||
def iter_dotnet_table(pe: dnfile.dnPE, name: str) -> Iterator[Any]:
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.mdtables is not None
|
||||
|
||||
|
||||
@@ -19,16 +19,9 @@ def extract_file_os(**kwargs) -> Iterator[Tuple[Feature, Address]]:
|
||||
yield OS(OS_ANY), NO_ADDRESS
|
||||
|
||||
|
||||
def validate_has_dotnet(pe: dnfile.dnPE):
|
||||
assert pe.net is not None
|
||||
assert pe.net.mdtables is not None
|
||||
assert pe.net.Flags is not None
|
||||
|
||||
|
||||
def extract_file_arch(pe: dnfile.dnPE, **kwargs) -> Iterator[Tuple[Feature, Address]]:
|
||||
# to distinguish in more detail, see https://stackoverflow.com/a/23614024/10548020
|
||||
# .NET 4.5 added option: any CPU, 32-bit preferred
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.Flags is not None
|
||||
|
||||
@@ -81,7 +74,6 @@ class DnfileFeatureExtractor(FeatureExtractor):
|
||||
# self.pe.net.Flags.CLT_NATIVE_ENTRYPOINT
|
||||
# True: native EP: Token
|
||||
# False: managed EP: RVA
|
||||
validate_has_dotnet(self.pe)
|
||||
assert self.pe.net is not None
|
||||
assert self.pe.net.struct is not None
|
||||
|
||||
@@ -97,7 +89,6 @@ class DnfileFeatureExtractor(FeatureExtractor):
|
||||
return bool(self.pe.net)
|
||||
|
||||
def is_mixed_mode(self) -> bool:
|
||||
validate_has_dotnet(self.pe)
|
||||
assert self.pe is not None
|
||||
assert self.pe.net is not None
|
||||
assert self.pe.net.Flags is not None
|
||||
@@ -105,7 +96,6 @@ class DnfileFeatureExtractor(FeatureExtractor):
|
||||
return not bool(self.pe.net.Flags.CLR_ILONLY)
|
||||
|
||||
def get_runtime_version(self) -> Tuple[int, int]:
|
||||
validate_has_dotnet(self.pe)
|
||||
assert self.pe is not None
|
||||
assert self.pe.net is not None
|
||||
assert self.pe.net.struct is not None
|
||||
@@ -113,7 +103,6 @@ class DnfileFeatureExtractor(FeatureExtractor):
|
||||
return self.pe.net.struct.MajorRuntimeVersion, self.pe.net.struct.MinorRuntimeVersion
|
||||
|
||||
def get_meta_version_string(self) -> str:
|
||||
validate_has_dotnet(self.pe)
|
||||
assert self.pe.net is not None
|
||||
assert self.pe.net.metadata is not None
|
||||
assert self.pe.net.metadata.struct is not None
|
||||
|
||||
@@ -40,12 +40,6 @@ def extract_file_format(**kwargs) -> Iterator[Tuple[Format, Address]]:
|
||||
yield Format(FORMAT_DOTNET), NO_ADDRESS
|
||||
|
||||
|
||||
def validate_has_dotnet(pe: dnfile.dnPE):
|
||||
assert pe.net is not None
|
||||
assert pe.net.mdtables is not None
|
||||
assert pe.net.Flags is not None
|
||||
|
||||
|
||||
def extract_file_import_names(pe: dnfile.dnPE, **kwargs) -> Iterator[Tuple[Import, Address]]:
|
||||
for method in get_dotnet_managed_imports(pe):
|
||||
# like System.IO.File::OpenRead
|
||||
@@ -84,7 +78,6 @@ def extract_file_namespace_features(pe: dnfile.dnPE, **kwargs) -> Iterator[Tuple
|
||||
|
||||
def extract_file_class_features(pe: dnfile.dnPE, **kwargs) -> Iterator[Tuple[Class, Address]]:
|
||||
"""emit class features from TypeRef and TypeDef tables"""
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.mdtables is not None
|
||||
assert pe.net.mdtables.TypeDef is not None
|
||||
@@ -106,7 +99,6 @@ def extract_file_os(**kwargs) -> Iterator[Tuple[OS, Address]]:
|
||||
def extract_file_arch(pe: dnfile.dnPE, **kwargs) -> Iterator[Tuple[Arch, Address]]:
|
||||
# to distinguish in more detail, see https://stackoverflow.com/a/23614024/10548020
|
||||
# .NET 4.5 added option: any CPU, 32-bit preferred
|
||||
validate_has_dotnet(pe)
|
||||
assert pe.net is not None
|
||||
assert pe.net.Flags is not None
|
||||
|
||||
@@ -171,7 +163,6 @@ class DotnetFileFeatureExtractor(FeatureExtractor):
|
||||
# self.pe.net.Flags.CLT_NATIVE_ENTRYPOINT
|
||||
# True: native EP: Token
|
||||
# False: managed EP: RVA
|
||||
validate_has_dotnet(self.pe)
|
||||
assert self.pe.net is not None
|
||||
assert self.pe.net.struct is not None
|
||||
|
||||
@@ -190,7 +181,6 @@ class DotnetFileFeatureExtractor(FeatureExtractor):
|
||||
return is_dotnet_mixed_mode(self.pe)
|
||||
|
||||
def get_runtime_version(self) -> Tuple[int, int]:
|
||||
validate_has_dotnet(self.pe)
|
||||
assert self.pe.net is not None
|
||||
assert self.pe.net.struct is not None
|
||||
assert self.pe.net.struct.MajorRuntimeVersion is not None
|
||||
@@ -199,7 +189,6 @@ class DotnetFileFeatureExtractor(FeatureExtractor):
|
||||
return self.pe.net.struct.MajorRuntimeVersion, self.pe.net.struct.MinorRuntimeVersion
|
||||
|
||||
def get_meta_version_string(self) -> str:
|
||||
validate_has_dotnet(self.pe)
|
||||
assert self.pe.net is not None
|
||||
assert self.pe.net.metadata is not None
|
||||
assert self.pe.net.metadata.struct is not None
|
||||
|
||||
Reference in New Issue
Block a user