mirror of
https://github.com/sampletext32/ParkanPlayground.git
synced 2025-05-21 04:41:18 +03:00
Move section code checking logic from SectionHeaderParser to SectionHeader class
This commit is contained in:
parent
f1a2fca4f3
commit
e4adb45ed2
@ -203,7 +203,7 @@ namespace X86Disassembler.PE
|
||||
|
||||
for (int i = 0; i < SectionHeaders.Count; i++)
|
||||
{
|
||||
if (_sectionHeaderParser.IsSectionContainsCode(SectionHeaders[i]))
|
||||
if (SectionHeaders[i].ContainsCode())
|
||||
{
|
||||
codeSections.Add(i);
|
||||
}
|
||||
@ -219,7 +219,7 @@ namespace X86Disassembler.PE
|
||||
/// <returns>True if the section contains code, false otherwise</returns>
|
||||
public bool IsSectionContainsCode(SectionHeader section)
|
||||
{
|
||||
return _sectionHeaderParser.IsSectionContainsCode(section);
|
||||
return section.ContainsCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34,19 +34,5 @@ namespace X86Disassembler.PE.Parsers
|
||||
|
||||
return header;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if a section contains code
|
||||
/// </summary>
|
||||
/// <param name="section">The section to check</param>
|
||||
/// <returns>True if the section contains code, false otherwise</returns>
|
||||
public bool IsSectionContainsCode(SectionHeader section)
|
||||
{
|
||||
const uint IMAGE_SCN_CNT_CODE = 0x00000020; // Section contains code
|
||||
const uint IMAGE_SCN_MEM_EXECUTE = 0x20000000; // Section is executable
|
||||
|
||||
return (section.Characteristics & IMAGE_SCN_CNT_CODE) != 0 ||
|
||||
(section.Characteristics & IMAGE_SCN_MEM_EXECUTE) != 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,12 @@ namespace X86Disassembler.PE
|
||||
/// </summary>
|
||||
public class SectionHeader
|
||||
{
|
||||
// Section characteristics flags
|
||||
private const uint IMAGE_SCN_CNT_CODE = 0x00000020; // Section contains code
|
||||
private const uint IMAGE_SCN_MEM_EXECUTE = 0x20000000; // Section is executable
|
||||
private const uint IMAGE_SCN_MEM_READ = 0x40000000; // Section is readable
|
||||
private const uint IMAGE_SCN_MEM_WRITE = 0x80000000; // Section is writable
|
||||
|
||||
public string Name; // Section name
|
||||
public uint VirtualSize; // Virtual size
|
||||
public uint VirtualAddress; // Virtual address
|
||||
@ -15,5 +21,42 @@ namespace X86Disassembler.PE
|
||||
public ushort NumberOfRelocations; // Number of relocations
|
||||
public ushort NumberOfLinenumbers; // Number of line numbers
|
||||
public uint Characteristics; // Characteristics
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the section contains code
|
||||
/// </summary>
|
||||
/// <returns>True if the section contains code, false otherwise</returns>
|
||||
public bool ContainsCode()
|
||||
{
|
||||
return (Characteristics & IMAGE_SCN_CNT_CODE) != 0 ||
|
||||
(Characteristics & IMAGE_SCN_MEM_EXECUTE) != 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the section is readable
|
||||
/// </summary>
|
||||
/// <returns>True if the section is readable, false otherwise</returns>
|
||||
public bool IsReadable()
|
||||
{
|
||||
return (Characteristics & IMAGE_SCN_MEM_READ) != 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the section is writable
|
||||
/// </summary>
|
||||
/// <returns>True if the section is writable, false otherwise</returns>
|
||||
public bool IsWritable()
|
||||
{
|
||||
return (Characteristics & IMAGE_SCN_MEM_WRITE) != 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the section is executable
|
||||
/// </summary>
|
||||
/// <returns>True if the section is executable, false otherwise</returns>
|
||||
public bool IsExecutable()
|
||||
{
|
||||
return (Characteristics & IMAGE_SCN_MEM_EXECUTE) != 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user