Перейти к содержанию

Лидеры

  1. Garik66

    Garik66

    Помогаторы


    • Баллы

      5

    • Постов

      5 750


  2. keng

    keng

    Ветераны


    • Баллы

      2

    • Постов

      1 635


  3. tirion

    tirion

    Пользователи


    • Баллы

      2

    • Постов

      29


  4. A1t0r

    A1t0r

    Ветераны


    • Баллы

      1

    • Постов

      351


Популярный контент

Показан контент с высокой репутацией 24.03.2015 во всех областях

  1. Спасибо вам ребят. Автору топика, думаю, будет о чем поразмышлять
    1 балл
  2. Да, моя теория подтвердилась. Вызвал эти подфункции отдельно, теперь не критует. По всей видимости указатель стека смещался и прыгал не туда
    1 балл
  3. tirion, попробуй как у MasterGH, т.е. так: [ENABLE]alloc(newmem,2048)CREATETHREAD(newmem)newmem:call 0x003016B0ret[DISABLE]dealloc(newmem)
    1 балл
  4. Говорят, что создание потока в скрипте нужно вызывать последним, т.е. в самом низу. Сначала, мол, код записать, а потом уже поток сделать.
    1 балл
  5. Нет я пока только в одном своём скрипте здесь (скрипт "12 Телепорт + возврат к старту телепорта":) вызывал функцию и это была не игровая функция, а функция написанная мною для инъекции. А игровую функцию из другой инструкции я пока не вызывал и тоже пока до конца не допонял - как это правильно сделать. И вот здесь ещё, но здесь я просто тупо скопировал то, что написал MasterGH (особо не разбираясь). ЗЫ: А в отдельном потоке вообще ни разу не делал.
    1 балл
  6. keng, не очень понятно (я про реализацию этого в СЕ ассемблер): 1. Если вызывать функцию без инъекции, то как не повредить код игры. 2. А если через инъекцию, то напиши пожалуйста пример на основе примера tirion из этогосообщения.
    1 балл
  7. Представь себе пример. Есть программа, которая показывает кнопку "Скачать файл", по нажатию на которую начинает этот самый файл скачивать. Файл размером в 100 Тб, скорость - 56 Кбит\сек. То есть понадобится дофигалион времени на скачивание. А пользователю во время скачивания нужно показывать индикатор загрузки. Раньше было так, что можно было или качать и ждать, или рисовать этот самый индикатор. Потом изобрели потоки, которые позволили разделить контекст выполнения программы - одна ее часть теперь рисует индикатор, а другая - грузит файл. Процессор переключается между этими двумя потоками и выполняет их код поочередно. Для пользователя это выглядит, будто оно одновременно делает и то и другое, но это просто процессор работает быстро. А потом изобрели многозадачные ОС, которые работают примерно по этому же принципу. Дык вот в моем примере есть функция. Допустим, такая: void func(int a, int b, int c); Чтобы вызвать эту функцию из Си, надо сделать так: func(1, 2, 3); Чтобы из ассемблера - так: PUSH 3PUSH 2PUSH 1CALL func Мы взяли и нашли через Cheat Engine адрес этой самой функции, но нам хочется сделать такую инъекцию, чтобы не трогать сам код игры, но чтобы эта функция вызвалась в нужный нам момент. Тут и спасут потоки. Создаем поток и передаем ему код вызова функции - при создании потока ОС увидит его, скажет об этом процессору, тот переключит контекст выполнения на этот поток и выполнит код, а затем поток просто завершится и ничего больше не будет делать. Регистры и флаги не пострадают, потому что это выполнится "параллельно" (отдельно) от остального игрового кода. Такая вот штука.
    1 балл
  8. Попробуй использовать перед выходом на функцию использовать pushad, а после возврата popad.
    1 балл
  9. Шаг 8. Но твоё видео не нашёл. Поэтому на всякий случай вот ещё:
    1 балл
  10. А там глядишь и до ассемблера дорастёшь)
    1 балл
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.