Как заполнить всю память ?

Discussion in 'WASM.A&O' started by Medstrax, Jun 6, 2010.

  1. Medstrax

    Medstrax Забанен

    Blog Posts:
    0
    Joined:
    Jul 18, 2006
    Messages:
    673
    Гипотетическая ситуация. Пусть все 4 Гб адресного пространства адресуют writeable memory.
    Задача написать код, который заполнит все эти 4 Гб неким однобайтовым значением. Значение по вашему выбору.
    Не забываем, что код тоже находится в этих 4 Гб. Для однобайтового значения я увидел пока только одно решение.
    Для 2-4-байтового решений больше.
     
  2. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    rep stosb?
     
  3. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    medstrax1
    наврно имелось в виду "всю - код" ?
     
  4. Sol_Ksacap

    Sol_Ksacap Миша

    Blog Posts:
    0
    Joined:
    Mar 6, 2008
    Messages:
    623
    rep stos и rep movs – особые инструкции. Заполнение будет продолжаться даже после перезаписи выполняемого кода в памяти.
     
  5. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    по rep movsb понял, что заполняющая команда может быть > 1 байта.

    мой вариант

    mov eax,90909090h
    mov [eax],0d0ffh
    jmp eax

    такая шутка еще в голову пришла. не одним байтом, но все равно мне чемто
    push 9024048f
    jmp esp
     
  6. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    qqwe
    Прикольно, но не совсем понятно почему это должно работать. Что будет, когда call затрёт свой же адрес nop-ми?
     
  7. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    qqwe
    Так вроде должно.
    Code (Text):
    1. mov eax,0h
    2. mov [eax],0d0ffh
    3. jmp eax
     
  8. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    Booster
    ничего не будет. будет выполнять нопы.

    так тоже можно. любую безопасную команду.
     
  9. Medstrax

    Medstrax Забанен

    Blog Posts:
    0
    Joined:
    Jul 18, 2006
    Messages:
    673
    Смелое заявление, но, увы, неверное
     
  10. Medstrax

    Medstrax Забанен

    Blog Posts:
    0
    Joined:
    Jul 18, 2006
    Messages:
    673
    затирание нопами не катит, это затрет сам код
     
  11. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    medstrax1
    как можно затереть всю память не затерев сам код? или имеется в виду, что сам код, включая подготовочный, должен состоять из одного байта или из нескольких одинаковых байт? уточните задачу.
     
  12. Medstrax

    Medstrax Забанен

    Blog Posts:
    0
    Joined:
    Jul 18, 2006
    Messages:
    673
    в этом и сложность
     
  13. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    qqwe
    Так оно дойдёт до адреса 90909090h и пойдёт выполнять нопы, но ниже адреса 90909090h тоже нужно писать.
     
  14. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    Code (Text):
    1. cld
    2. mov edi, 1
    3. mov al, 0aah
    4. mov byte ptr[0], al
    5. jmp 0
     
  15. semishift

    semishift Сергей

    Blog Posts:
    0
    Joined:
    Feb 6, 2010
    Messages:
    6
    Code (Text):
    1.  std
    2.         xor eax, eax
    3.         dec eax
    4.         mov esi, eax
    5.         dec eax
    6.         mov edi, eax
    7.         sub eax, 14
    8.         mov ecx, eax
    9.         not eax
    10.         rep movsb
    11.         movaps xmm0, [eax]
    12.         movaps [ecx], xmm0
    13.         movaps [ecx+1], xmm0
     
  16. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    Code (Text):
    1. cld
    2. mov edi, 1
    3. mov esi, 0
    4. mov al, 0a4h
    5. mov byte ptr[0], al
    6. jmp 0
     
  17. semishift

    semishift Сергей

    Blog Posts:
    0
    Joined:
    Feb 6, 2010
    Messages:
    6
    наверное так

    Code (Text):
    1. 0x00000000    rep stosd
    2. 0x00000002    std
    3. 0x00000003    mov eax, 90h
    4. 0x00000008    mov edi, -1
    5. 0x0000000d    jmp 0
    ничто не мешает нам, находясь в высших адресах, загрузить в начало этот код и сделать jmp 0x2
     
  18. Medstrax

    Medstrax Забанен

    Blog Posts:
    0
    Joined:
    Jul 18, 2006
    Messages:
    673
    2Booster
    +1
     
  19. Sol_Ksacap

    Sol_Ksacap Миша

    Blog Posts:
    0
    Joined:
    Mar 6, 2008
    Messages:
    623
    medstrax1

    :)

    Code (Text):
    1. format PE
    2.  
    3. section '.text' readable writable executable
    4. entry $
    5.     push edi
    6.     xor edx, edx
    7.     mov eax, $42                ; inc edx
    8.     mov ecx, eax                ; bytecount
    9.     call @f
    10.     mov eax, edx
    11.     pop edi
    12.     retn
    13.    
    14. @@:
    15.     lea edi, [$]
    16.     mov byte [edi + ecx], $C3   ; retn
    17.     rep stosb
    18.     nop
    19.     int3
    Code (Text):
    1. C:\Users\xk\Desktop>lolstos & echo !errorlevel!
    2. 54
    (Предполагается, что настройки кэширования подходящие, а во время заполнения не придут прерывания).
     
  20. Medstrax

    Medstrax Забанен

    Blog Posts:
    0
    Joined:
    Jul 18, 2006
    Messages:
    673
    2Sol_Ksacap
    Был не прав, беру слова обратно.