从PeNet API中的对象访问字段

问题描述 投票:0回答:1

我需要访问PeNet API中的these字段。然而,返回的值是uint16,我实际上不知道如何处理这个问题。有谁知道如何访问这些字段?

我已经去过访问这些字段,但是提供的结构没有明显(对我来说)访问它们的方法。我也尝试逐点打印uint16,但这也没有提供任何特别明显的东西(有8个字段要访问,所以我认为它可能是前8个或后8个,但这是不成功的)。

任何帮助将非常感激,因为我不知道在哪下看:

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var peHeader1 = new PeNet.PeFile(@"C:\Windows\System32\kernel32.dll");
            Console.WriteLine(peHeader1.ImageNtHeaders.OptionalHeader.DllCharacteristics.GetType());
            Console.WriteLine(peHeader1.ImageNtHeaders.OptionalHeader.DllCharacteristics);

            byte[] bytes = BitConverter.GetBytes(peHeader1.ImageNtHeaders.OptionalHeader.DllCharacteristics);

            int bitPos = 0;
            while (bitPos < 8 * bytes.Length)
            {
                int byteIndex = bitPos / 8;
                int offset = bitPos % 8;
                bool isSet = (bytes[byteIndex] & (1 << offset)) != 0;    

                Console.WriteLine(isSet);

                bitPos++;
            }

            Console.ReadKey();
        }
    }
}
c# portable-executable
1个回答
0
投票

我不确定我是否完全理解你的问题,但是这里有:

PeNet有一个enum,如下所示:

[Flags]
enum OptionalHeaderDllCharacteristics : ushort
{
  IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE,
  IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY,
  IMAGE_DLLCHARACTERISTICS_NO_BIND,
  IMAGE_DLLCHARACTERISTICS_NO_ISOLATION,
  IMAGE_DLLCHARACTERISTICS_NO_SEH,
  IMAGE_DLLCHARACTERISTICS_NX_COMPAT,
  IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE,
  IMAGE_DLLCHARACTERISTICS_WDM_DRIVER,
}

你以某种方式获得了价值。该值必须转换为枚举:

Int16 value = 3; //This is the value you got somewhere
OptionalHeaderDllCharacteristics testEnum = (OptionalHeaderDllCharacteristics)value; //Cast it

一旦你施放它,你可以测试你想要的任何旗帜:

if (testEnum.HasFlag(OptionalHeaderDllCharacteristics.IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY))
{
  //Do something
}
© www.soinside.com 2019 - 2024. All rights reserved.