Помогите пожалуйста с разбором кода SHELL_EXECUTE

Тема в разделе "WASM.BEGINNERS", создана пользователем retro, 20 июл 2011.

  1. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    Очень нужны максимальные комментарии!!
     
  2. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Не очень понятно, в чем суть вопроса.
     
  3. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    Разбираю код по винтикам. Пытаюсь понять всю логику проги! Вот и нужны комментарии!
     
  4. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Если есть элементарные знания PE, там ничего непонятного быть не должно.
    Спрашивай более конкретно, по тем пунктам, которые непонятны.
     
  5. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    1 -- Начало
    Происходит загрузка в стек кода программы?

    ==============
    shell_code_start:
    sub esp, 500
    mov ecx, CODE_LEN
    mov edi, esp
    mov esi, code_start
    cld
    rep movsb
    jmp esp
     
  6. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    jmp esp ;И куда я прыгаю?
     
  7. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    И такие вопросы и далее. Вот поэтому и нужны комментарии.
    Извините за беспокойство.
     
  8. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    retro
    На только что скопированный в стек код.
     
  9. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    retro
    Intel® 64 and IA-32 Architectures Software Developer's Manual v.1, 6.2.
    Intel® 64 and IA-32 Architectures Software Developer’s Manual v.2A, p.501.
    И так далее =)
     
  10. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    code_start:
    jmp trick_to_avoid_nulls
    call_back:
    pop esi
    ;--------------------
    ;--------------------
    trick_to_avoid_nulls:
    jmp pi_offset

    К чему эти прыжки?
     
  11. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    Что это такое??
     
  12. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    retro
    Ну я думал что нужно знать инструкции, а пытаться разобрать код без их знания - это как читать книгу на языке майя.
     
  13. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    pi_offset:
    call call_back
     
  14. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    Инструкции инструкциями а вот прыжки туда-сюда

    call_back:
    pop esi
    с восстановлением esi не зная где и почему он изменялся --- и снова нужда в комментариях!!!
     
  15. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Код (Text):
    1. call call_back
    2. pop esi
    В esi будет адрес следующего за инструкцией call_back байта. Это данные, адрес которых нужно получить.
     
  16. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    call - помещает в стек адрес возврата
    pop - достает из стека адрес возврата

    Имхо, тебе скорее не мануалы интеля нужны а опыт программирования/отладки на асме.
     
  17. retro

    retro New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    20
    после API -- invoke GetProcAddress, hAddrLib, addr FuncName
    call eax
    и после вызова я имею на вершине стека адрес возврата для ret??!
    И где взять первоначальные значения регистров при поступлении проги в оперативку?
     
  18. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Что-то я тебя слегка не понимаю.
    После вызова апи ты ничего не имеешь, если правильно забил агументы в стек.
    После
    Код (Text):
    1. pi_offset:
    2.  
    3.         call call_back
    Ты имеешь на вершине стека адрес следующего байта после инструкции call. В данном случае это адрес vars_start.

    В отладчике глянуть, к примеру. Они все равно зависят от реализации загрузчика и на них нельзя полагаться как на что-то определенное.
     
  19. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    retro
    Инструкция Pop r32 извлекает из Ss:[Esp] значение в регистр r32 и выполняет инкремент Esp(+4):
    Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B, p.205.

    Учите матчасть!
    Там расписаны все ваши вопросы по каждой инструкции.