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

Antonshka

Пользователи+
  • Публикаций

    175
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

Antonshka стал победителем дня 29 марта 2019

Antonshka имел наиболее популярный контент!

Репутация

29 Novice

Информация о Antonshka

  • Звание
    Спамер

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Я в свое время делал что-то подобное. Мне нужно было сохранить часть выделенной памяти в СЕ в файл в момент выполнения определенной игровой инструкции. Делал я это используя WinApi. Игра была 64 битная, поэтому было достаточно просто. Вот большая часть кода. Я не помню сейчас уже что там и к чему в точности. Не хочется вспоминать. Но из некоторых комментарием должно быть понятно. Есть еще часть скрипта для считывания данных из файла в память, но она здесь не нужна. Как написал @Xipho, нужно лишь прочитать про соглашения, про правила передачи аргументов.
  2. fbstp как раз таки преобразовывает Hex в String. Мне нужно наоборот, - String в Hex. Hex в String String в Hex Разобрался почему не работал способ с fbld. Нужно было перед инструкцией обнулить значение следующего адреса. Спасибо @Xipho за наводку. Вызов Atoi работает как надо Также в том первом способе что я написал выше, ошибка была в том, что нужно было умножать не на 10, а на 0A
  3. Привет, помогите пожалуйста с преобразованием числа ASCII в Hex число. Например, в памяти приложения есть строка, - Player12. Задача, - взять число 12, стоящее после Player, и преобразовать его в Hex, то есть в C. Сделать это нужно на ассемблере. Число 12, в виде строки, записывается в памяти как 3132, в Hex. Можно воспользоваться следующим способом преобразования: 1) регистр RAX = 0; 2) RAX * 10 + (31 - 30); // (RAX теперь равен 1) 3) RAX * 10 + (32 - 30); // (RAX теперь равен 12) Но проблема в том, что на выходе мы имеем число 12, а не C, в регистре RAX. Добраться до 12 в Player12, - не проблема. Вычесть 30, умножить на 10, сложить, - тоже не проблема. Проблема в том, как преобразовать в Hex. FPU сопроцессор имеет для преобразования числа 12 (которое уже в RAX), в C (Hex), специальную команду - fbld. Например: 1) mov [memory],rax 2) fbld [memory] //загружаем 12 3) fistp [memory] //выгружаем уже C (Hex) Но у меня такой способ не работает, выгружает всегда 8000 (если fistp word ptr).
  4. Потока два, ага. Но в каждом из них происходит несвоевременная запись в переменную, как видно на видео. Вообще эту функцию вызывают 12 разных вызовов, судя по тому что показывает Ghidra. Но разве может один вызов заместить другой, пока тот еще в процессе выполнения.
  5. Регистры да, не меняются. Вот как это выглядит
  6. Привет всем! Кто-нибудь сталкивался с такою же странностью при дебагинге в СЕ как и я? Вот как она себя проявляет: Есть некая инструкция, работающая с координатами текстур. Я делаю на неё инжект, добавляя к имеющемуся вот такой вот код затем ставлю брейкпоинт на инструкцию "movdqu [rcx],xmm0", и начинаю двигаться по коду, клавишей F7 (Step). Иногда запись в "Alloc_Address_1" происходит своевременно, то есть сразу после шага "mov [Alloc_Address_1],r9". Но иногда, запись повторяется, например спустя один или два шага, на "pop r10" или "pop r9". Причем записывается уже совсем другое число. Как такое возможно, если я двигаюсь пошагово? Может быть есть какой-то иной независящий от брейкпоита поток игры, который использует эту же инструкцию? Возможно он перезаписывает значение в адрес? С другой стороны, как этот отдельный поток не перезаписывает значение постоянно, но только тогда, когда я делаю очередной шаг по F7. Перезапись не сделается пока я не сделаю шаг, перезапись может произойти и выше "mov [Alloc_Address_1],r9", например "mov r9,[rcx]". СЕ 7.2.Я пробовал и 7.0.
  7. Спасибо, буду разбираться.
  8. Привет всем! Вам когда-либо приходилось делать эффект тряски для игровой камеры? То есть такое движение камеры как если бы снимали на телефон, к примеру. Некоторое время назад я использовал такой алгоритм. Он хоть и работает нормально, но движение все-равно не естественное. (0 - 20 / 1000) - здесь число 20 это рандомное число, генерируемое lua нструкцией math.random. То есть при 20, число генерируется от -20 до 20. Далее длится на 1000. После того как динамическое число сравняется с этим полученным числом, снова сработает math.random. И цикл повторится. Движения хоть и получаются в разных диапазонах, но они все протекают с одинаковым характером. Вначале увеличение скорости, потом уменьшение. В реальности же, все не так. Рандомайзер установлен на каждую координату и на каждый угол. То есть 6 независимых друг от друга движений. Сейчас думаю как сделать его более реалистичным. По идее получается нужно задать координате или углу такое движение. Значит нужно менять время и менять силу.
  9. Спасибо! Но мне всё же WinAPI более пригляделся.
  10. Что делает твой пример кода? И что значит статик стек? Никак не пойму. Нашел вот в описании соглашений для 64 (по той ссылке что выложил выше) Поэтому регистр RSP неизменяется в 64 битном приложении до и после вызова функции? Потому что вызываемая функция должна восстановить его? Запись/чтение из файла, если кому-нибудь понадобится. Тест проводился на СЕ туториал 64 бит Запись Чтение
  11. Спасибо за направление. Прочитал про соглашения. Для 64 и 32 битных приложений способ передачи параметров оказался различный. Вот описание передачи параметров, если кому интересно. Протестировал на 32 и 64 битных приложениях. Файл создается, хендл закрывается, все хорошо. Завтра допишу методы на запись и чтение. В ходе экспериментов я наткнулся на одну интересную особенность. Объясните мне кто знает, почему так происходить. В 32 битном приложении, функция CreateFileA, после своего выполнения увеличивает ESP на количество переданных ей параметров умноженное на размер их типа (4 байта). То есть перед вызовом функции и после ее вызова ESP разный. Тоже с функцией CloseHandle, в 32 разрядном приложении, ESP после выполнения больше на 4 (функция принимает один параметр). То есть функции увеличивают ESP автоматически. В 64 битном приложении, RSP до и после вызова всегда одинаковый. Никакой автоматизации нет. Это такая особенность которую нужно просто принять как должное? Где можно прочитать о ней?
  12. Привет всем! У меня появилась необходимость записи и чтения файла через ассемблер СЕ. Через Lua CE это делается либо через writeRegionToFile readRegionFromFile либо через io.open Но я не могу использовать Lua потому что мне нужно производить запись или чтения файла именно в момент выполнения ассемблерной инструкции. На данный момент знаю лишь то что для осуществления записи и чтения файла через ассемблер СЕ нужно предварительно подготовить необходимые для этого аргументы и вызвать метод CreateFileA а затем WriteFile или ReadFile Но как это сделать через ассемблер СЕ я пока не понял. Именно, в какие регистры нужно записывать аргументы. Есть мысль что можно попробовать собрать СЕ трейнер или С++ приложение с функцией записи и чтения файла. Затем отладить их через например СЕ. Но это пока только мысль.
  13. Antonshka

    Телефон для слепых

    Это то что нужно. Благодарю.
×
×
  • Создать...

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

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