Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Сместить адрес регистра

10.01.2020, 16:27. Показов 2962. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читаю статью с хабра https://habr.com/en/post/190800/
и там сказано :
CONTEXT lcContext;
lcContext.ContextFlags = CONTEXT_ALL;
GetThreadContext(m_cProcessInfo.hThread, &lcContext);
Окей, мы получили его. Что теперь?
В регистре EIP содержится адрес следующей инструкции для выполнения. Он представлен членом Eip структуры CONTEXT. Как я уже упоминал раннее, EIP продвинулся вперёд и мы должны вернуть его обратно. К счастью для нас, нам надо всего лишь переместить его ровно на один байт, так как инструкция точки останова равна по длине одному байту. Именно это и делает код ниже:
lcContext.Eip --; // Move back one byte
SetThreadContext(m_cProcessInfo.hThread, &lcContext);
так вот тут ошибка же ,
C++
1
lcContext.Eip --;
не сдвинет адрес на 1 байт , а просто уменьшит значение этого регистра на 1, как правильно сдвинуть адрес на 1 байт? Создать указатель на этот регистр и его уменьшить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2020, 16:27
Ответы с готовыми решениями:

Создание регистра сведений Адрес
Здравствуйте! Как посоветуете создать Адрес в конфигурации (только улица, город и страна)? Чтобы при выборе улицы автоматически выбирались...

Поместить адрес регистра в память
Есть кусочек кода mov ,al mov eax, mov ,eax test rcx,rcx

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей выполняемой программы. 3. Вычислить...

28
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
11.01.2020, 16:05
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ReYalp Посмотреть сообщение
я понимаю что я смещаю адрес самого регистра, а не адрес в регистре, меня больше смущает почему это работает, во-вторых вы шлете какую-то непонятную дичь, хранится предположим там число 20 в том регистре, когда автор делает регистр-- то он уменьшает 20 на 1, это же не сдвиг адреса, хелоо
Рекомендую попробовать Cheat Engine, пройди туториал и ты почувствуешь что такое адрес, что такое регистр, что такое смещение

Ты реально делаешь ракету, при этом не зная как она работает и в добавок не пытаешься понять
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
11.01.2020, 17:05  [ТС]
zayats80888, окей, хорошо, если eip-- смещает на 1 байт то почему это тогда не работает?
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
11.01.2020, 17:12
Цитата Сообщение от ReYalp Посмотреть сообщение
почему это тогда не работает?
что это?
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
11.01.2020, 17:19
Цитата Сообщение от ReYalp Посмотреть сообщение
окей, хорошо, если eip-- смещает на 1 байт то почему это тогда не работает?
Я не понимаю, что у вас не работает?

Регистр это условно ячейка СОЗУ, которая хранит некоторую информацию (подобно обычным переменным), в данном случае
EIP - Extended Instruction Pointer тоесть указатель на инструкцию
Такие указатели - просто адреса, адреса ничем не отличаются от обычного числа!
Чтобы сдвинуть на 1 байт нужно отнять 1, если у вас что то не работает - скорее всего ошибка не тут
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
12.01.2020, 00:48  [ТС]
AndryS1, так а как же не отличаются если адреса хранятся же в шестнадцатиричном виде? zayats80888, я понял что я фигню писал, но почему не работает уменьшение адреса в регистре на 1? А если я делаю так как писал выше то все окей?
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
12.01.2020, 01:00
Цитата Сообщение от ReYalp Посмотреть сообщение
А если я делаю так как писал выше то все окей?
Если ты про
Цитата Сообщение от ReYalp Посмотреть сообщение
C++
1
2
DWORD* pl = &lcContext.Eip;
--pl; // Move back one byte
то ты тут просто объявляешь локальную переменную pl указывающую на поле Eip, потом "смещаешь" этот локальный указатель. После этого он возможно указывает на другое поле lcContext(на другой регистр может). Что после этого ты делаешь с этим указателем и что там у тебя "работает" мне не видно.
1
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
12.01.2020, 01:21
Цитата Сообщение от ReYalp Посмотреть сообщение
Создать указатель на этот регистр и его уменьшить?
Начнем с того, то нельзя создать указатель на регистр.
Цитата Сообщение от ReYalp Посмотреть сообщение
как правильно сдвинуть адрес на 1 байт?
Адрес чего? Адрес, находящийся в eip?
Процессор сам его меняет выполняя программу.
Этот адрес программисту можно изменить с помощью инструкций call, jmp, и т.д.
В CONTEXT содержатся значения флагов и состояние регистров в определенный момент, но это всё уже лежит в памяти, которую Вы предоставили под CONTEXT. Туда просто скопируются нужные значения. Их изменение не есть изменение значений в регистрах.

Если бы Вы могли так менять регистр eip, чтобы Вам это дало? Чего Вы хотите добиться изменением eip?
1
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
12.01.2020, 02:21
Цитата Сообщение от ReYalp Посмотреть сообщение
так а как же не отличаются если адреса хранятся же в шестнадцатиричном виде?
иди почитай про виды
FF - 255
--FF = 254
255 = FF
--255 = FE

РАЗНИЦЫ НЕТ, ЭТО ПРОСТО ПРЕДСТАВЛЕНИЕ ДЛЯ УДОБСТВА

Добавлено через 45 секунд
И ВСЕ данные для компа вообще хранятся в bin
0
12.01.2020, 02:23

Не по теме:

Цитата Сообщение от AndryS1 Посмотреть сообщение
ЭТО ПРОСТО ПРЕДСТАВЛЕНИЕ ДЛЯ УДОБСТВА
Запись числа.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2020, 02:23

Частный адрес, динамический адрес, статический адрес - какой у меня?
Привет. Открываем рубрику глупых вопросов. Я сижу с компьютера который подключен к интернету по кабелю, кабель от компьютера идёт к...

Как реализовать в LPT взаимосвязь статус регистра и регистра данных
Как реализовать в LPT взаимосвязь статус регистра и регистра данных. Чтобы при изменении сигнала в статус регистре на одном из регистров...

Как записать информацию из 16 битного регистра в два регистра по 8 бит
Как записать информацию из 16 битного регистра в два регистра по 8 бит. (То есть каждый раз может быть разное число в регистре 16 бит) ...

Строки: все буквы малого регистра заменить большими, а большого регистра малыми
введенной строке все буквы малого регистра заменить большими,а большого регистра малыми

Преобразовать буквы от k до х нижнего регистра в соответствующие верхнего регистра
Написать программу, выполняющую действия со строкой символов . Для модификации символов использовать условную операцию. Вывести исходную и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Генератор паролей
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе. Самым главным критерием для меня было создание паролей, в котором отсутствуют знаки: | 1 l I Обработка содержит реквизиты: -. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru