Как прописать данные в адресное пространство текущего процесса?

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 19 сен 2009.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    AspireЗавязывай троллить, а?
    Записывается, но прога некорректно заканчивается.
    Нечего сказать- не пиши.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    amvoz
    В чём это выражается ?
    Если сепшен - то как обычно, в студию контекст, бактрейс и дизасм адреса где он возникает.
     
  3. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Clerk
    Как всегда, в своем репертуаре. Опять только заголовок прочитал?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Aspire
    Интуиция гадалки почемуто молчит.
    Что это, где это ?
     
  5. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Clerk
    А выше не судьба почитать?
     
  6. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Ребят, завязывайте с наркотиками ))
    Топикстартеру: если запись в секцию разрешена, то это не значит, что ТЕБЕ можно туда что-то записать. Не ты же создавал эту секцию. Все. Ушел. Но весело ))
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Aspire
    Вы не те вопросы задаёте. Автор дайте экзешник, который "не корректно завершается", если сами посмотреть нужную инфу не в состоянии.
     
  8. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Появляется надпись: ra123.exe обнаружена ошибка. Приложение будет закрыто, приносим извинения за неудобства.
    ...Я думаю, нет необходимости дословно писать всё, что там написано. Майкрософт просит прислать отчёт и всё такое.
    Три кнопки внизу: отладка, отправить отчёт, не отправлять.
    Жму на отладку.

    Автоматически включается OllyDbg. Вот на этом коде всё стопорится.

    MOV EAX,DWORD PTR DS:[402020]//Cтопорится не на этой строке, а на следующей!
    Код (Text):
    1. 0040133B  |.  8B08          MOV ECX,DWORD PTR DS:[EAX]
    2. 0040133D  |.  85C9          TEST ECX,ECX
    3. 0040133F  |.  74 26         JE SHORT ra123.00401367
    4. 00401341  |.  EB 0D         JMP SHORT ra123.00401350
    5. 00401343  |   90            NOP
    6. 00401344  |   90            NOP
    7. 00401345  |   90            NOP
    8. 00401346  |   90            NOP
    9. 00401347  |   90            NOP
    10. 00401348  |   90            NOP
    11. 00401349  |   90            NOP
    12. 0040134A  |   90            NOP
    13. 0040134B  |   90            NOP
    14. 0040134C  |   90            NOP
    15. 0040134D  |   90            NOP
    16. 0040134E  |   90            NOP
    17. 0040134F  |   90            NOP
    18. 00401350  |>  FF10          /CALL DWORD PTR DS:[EAX]
    19. 00401352  |.  8B0D 20204000 |MOV ECX,DWORD PTR DS:[402020]
    20. 00401358  |.  8B51 04       |MOV EDX,DWORD PTR DS:[ECX+4]
    21. 0040135B  |.  8D41 04       |LEA EAX,DWORD PTR DS:[ECX+4]
    22. 0040135E  |.  A3 20204000   |MOV DWORD PTR DS:[402020],EAX
    23. 00401363  |.  85D2          |TEST EDX,EDX
    24. 00401365  |.^ 75 E9         \JNZ SHORT ra123.00401350
    25. 00401367  |>  C9            LEAVE
    А вот снимок этой секции .data

    00402000 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 яяяя............
    00402010 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .@..............
    00402020 3C 19 40 CA 00 00 00 00 00 00 00 00 00 00 00 00 <@К............
    00402030 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF ....яяяя....яяяя
    00402040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00402050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00402060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00402070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00402080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00402090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    004020A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    004020B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    004020C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    004020D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    004020E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    004020F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00402100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00402110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00402120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00402130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

    Дико извиняюсь, если не то напписал.
    Но вообще мне ПОНЯТНА одна маленькая детал. А именно- почему на второй строке всё стопорится.
    Может, я не прав, но этот код специально сделан для того, чтобы в .data ничего нельзя записывать

    Хотя, если судить по флагам- то можно. Вот это уже непонятно.
     
  9. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    AspireПонял.
    А как записать, можно вопрос?

    Одна функцией нельзя, второй нельзя, третьей тоже нельзя. Ответьте, если можете и буду Вам очень благодарен.

    Или вообще никак?
     
  10. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    amvoz
    Да пиши ради бога, любой функцией, только сначала память для записи выдели. Можешь статически, можешь динамически, но выдели. А так, ты записываешь свой байтик, в адресное пространство процесса, туда, где уже храняться данные записанные самим процессом, загрузчиком или кем-то еще, и при этом нет гарантии, что процесс будет работать с твоими байтиками нормально, ведь, ты же даже на разобрался что ты меняешь...
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    amvoz
    Ладно сделаю вывод из того что есть. Значит раз у вас отладчик останавливается на инструкции следующей за этой:
    Тоесть Eax = 0x0CA40193C, за пределами доступного адресного пространства.
    Что это за код и что за переменная [0x402020] не известно.
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
     
  13. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Clerk!
    Именно, что неизвестно! Я этот код не прописывал и переменную 402020 я нигде не упоминал!
    Оно само там оказалось. Загрузчик загрузил. Я не знаю, с какой целью, знал бы- не спрашивал..

    Вот исходник. Тут и не пахнет таким кодом и переменной 0x402020 тоже нет, как видите!
    А вывод, который Вы сделали, так и я его сделал тоже.
    Я вижу, что не работает.

    Код (Text):
    1. #include <stdio.h>
    2. #include <Windows.h>
    3. #include <Winbase.h>
    4.  
    5. #define KolichesnvoZapisivaemihBayt 1
    6. #define NomerBaytaKudaNachatZapis  0x402023
    7. #define zapisivaemii_mass mass_2
    8.  
    9. int main () {
    10.  char mass_2 []= {0Xca};
    11.  CopyMemory ((void* ) NomerBaytaKudaNachatZapis, zapisivaemii_mass,  KolichesnvoZapisivaemihBayt);
    12.  getchar ();
    13.  return 0;
    14. }
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    amvoz
    Бинарника у нас нет. Ну и что вы от нас хотите ?
     
  15. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Clerk, вы невнимательны. Ну добавил человек байтик к какому-то адресу.. всего-то... а далше программа его вызвала (ну, наверное ей так нужно было), странно, почему не работает.. адрес всего то на байтик поменять.. непонятно.. хрень какая-то.

    Давайте по новой.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Aspire
    Еслиб я читал весь этот хлам ужеб глаза стёрлись. На крайний случай можно отладочные символы использовать, скомпилив с необходимой опцией.
     
  17. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Друзья!
    Я, кажется, начинаю понимать.
    Просто я считал, что в секции .data хранятся данные, которые объявлены ТОЛЬКО мной. Явно ли, ещё как-то...
    Код (Text):
    1. int i= cafebabe
    //Причём i глобальная переменная

    Ага, значит, прога пишет туда адрес (0X402000), который я НЕ УПОМИНАЮ нигде, но он ей зачем-то нужен.
    Потом она его использует, но, понятно, я его изменил и всё летит к чёртовой матери.
    Так, что ли?...
     
  18. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    наконец-то
     
  19. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Aspire
    я понял это не в последнюю очередь благодаря твоим подколкам. Но другой бы надулся- а ты ведь ставишь своей целью помочь, не так ли? И за это я тебе благодарен
    Но в одной детали ты не прав.

    Если разрешено записывать в секцию (флаг 80000000), то в неё разрешено записывать БЕЗУСЛОВНО (по крайней мере настоящий пример этой мысли не опровергает- писалось-то всегда на ять...). Другое дело, нужно знать что писать и куда писать.

    Оказывается не всё, что я считал мусором является таковым!
    Всем спасибо!
    До новых встреч!
     
  20. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    amvoz
    мне честно сказать не хватило терпения дочитать это до конца, но Вы не пробовали запустить отладчик и поставить на запись и чтение памяти из этой область точку останова. Так вы сможете определить что за код туда обращается за исключением Вашего и возможно поймете почему туда писать нельзя (или можно)