【问题标题】:Accessing fields from an object in the PeNet API从 PeNet API 中的对象访问字段
【发布时间】:2019-04-11 21:37:36
【问题描述】:

我需要访问 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】:

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

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2020-09-04
      相关资源
      最近更新 更多