Какой бинарный оператор применять для комбинации атрибутов секций?

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 7 июн 2010.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Друзья!
    То есть тут http://www.wasm.ru/article.php?article=green2red02 написано:
    То есть как вы поняли, это всё флаги, к ним надо применить побитовую операцию и получить A0000020H

    Какую операцию?
    Я всё перепробовал, A0000020H никак не выходит, при or или xor получается C0000020G, никак не A!

    ПОмогите пожалуйста! Спасибо.
     
  2. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    |
    Код (Text):
    1. #define IMAGE_SCN_CNT_CODE                   0x00000020  // Section contains code.
    2.  
    3. #define IMAGE_SCN_MEM_EXECUTE                0x20000000  // Section is executable.
    4. #define IMAGE_SCN_MEM_READ                   0x40000000  // Section is readable.
    5. #define IMAGE_SCN_MEM_WRITE                  0x80000000  // Section is writeable.
    http://webcache.googleusercontent.c...67-8017-4bae-9fde-d599bac8184a/pecoff_v8.docx
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    так правильно получается... к флагам применяется операция "или"... 0x80000000 || 0x40000000 = 0xC0000000...
     
  4. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    А в статье, на которую я дал ссылку, написано, что должно быть A!
    Вот чё делать? Наугад оставить C? Но это не наш метод! Наугад нельзя действовать.
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    Код (Text):
    1. 40 = 0100 0000
    2. 80 = 1000 0000
    3. A0 = 1010 0000
    была применена операция сдвига 40 вправо, затем или))) какие ещё варианты?)))
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    что значит "чего делать"? это флаги, чтобы работали оба, они оба же должны попасть в соответствующие биты 32-битного числа... следовательно, для них необходимо применить операцию "или" по битам...

    тут кстати у меня есть опечатка, я думаю все поняли где))) и какой язык)))
     
  7. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Ну я не знаю, если никто ничё не отпишет, буду пробовать так. Буду считать, что должно быть C и в статье опечатка
     
  8. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Так-то убедительно вообще-то.
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    не доверяешь мне значит?))))
     
  10. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    https://www.wasm.ru/forum/viewtopic.php?pid=382467#p382467
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    видимо в связи с эквивалентностью и спешкой вот такой баг вместо 2 поставили 4
     
  12. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
  13. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Говорю же: убедительно
     
  14. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    amvoz
    Ещё одно независимое подтверждение: опечатка. Можешь вывести это из первого же ответа в этой теме.

    >Флаги IMAGE_SCN_MEM_EXECUTE и IMAGE_SCN_MEM_READ эквивалентны.
    Они были эквивалентны лет шесть назад. Сейчас – нет.
    И на всякий случай: из наличия атрибута IMAGE_SCN_CNT_CODE не следует, что страницы выполнимы. Для выполнимости используется атрибут IMAGE_SCN_MEM_EXECUTE.
     
  15. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    Код (Text):
    1. CCHAR
    2. MiGetImageProtection (
    3.      IN ULONG SectionCharacteristics
    4.      )
    5.  
    6. /*++
    7.  
    8.      Routine Description:
    9.  
    10.      This function takes a section characteristic mask from the
    11.      image and converts it to an PTE protection mask.
    12.  
    13.      Arguments:
    14.  
    15.      SectionCharacteristics - Supplies the characteristics mask from the
    16.                     image.
    17.  
    18.      Return Value:
    19.  
    20.      Returns the protection mask for the PTE.
    21.  
    22. --*/
    23.  
    24. {
    25.           ULONG Index;
    26.           PAGED_CODE();
    27.  
    28.           Index = 0;
    29.           if (SectionCharacteristics & IMAGE_SCN_MEM_EXECUTE) {
    30.                Index |= 1;
    31.           }
    32.           if (SectionCharacteristics & IMAGE_SCN_MEM_READ) {
    33.                Index |= 2;
    34.           }
    35.           if (SectionCharacteristics & IMAGE_SCN_MEM_WRITE) {
    36.                Index |= 4;
    37.           }
    38.           if (SectionCharacteristics & IMAGE_SCN_MEM_SHARED) {
    39.           Index |= 8;
    40.      }
    41.  
    42.      return MmImageProtectionArray[Index];
    43. }
    Код (Text):
    1. CCHAR MmImageProtectionArray[16] =
    2. {
    3.                                     MM_NOACCESS,
    4.                                     MM_EXECUTE,
    5.                                     MM_READONLY,
    6.                                     MM_EXECUTE_READ,
    7.                                     MM_WRITECOPY,
    8.                                     MM_EXECUTE_WRITECOPY,
    9.                                     MM_WRITECOPY,
    10.                                     MM_EXECUTE_WRITECOPY,
    11.                                     MM_NOACCESS,
    12.                                     MM_EXECUTE,
    13.                                     MM_READONLY,
    14.                                     MM_EXECUTE_READ,
    15.                                     MM_READWRITE,
    16.                                     MM_EXECUTE_READWRITE,
    17.                                     MM_READWRITE,
    18.                                     MM_EXECUTE_READWRITE
    19. }
     
  16. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Sol_Ksacap спасибо