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

Редактирование памяти | Замена байтов большего кол-ва | C++


Рекомендуемые сообщения

Мне надо изменить строку в памяти стороннего приложения на строку с большим количеством символов к примеру: test -> testone
Я уже написал сам код по замене но дело в том что в "testone" кол-во байтов больше чем в "test" и когда я выполняю замену это производит краш (Так как задевается что-то другое).  Я не знаю, но у меня есть теория что мне надо создать свой блок памяти размером "testone" записать всё туда и в оригинальный адрес 

записать указатель на новый блок памяти(Это всего теория, я не знаю как это работает). Я уверен что это можно сделать, но не знаю как, жду вашей помощи.

(C++)

Ссылка на комментарий
Поделиться на другие сайты

11 часов назад, karlgalagger сказал:

но дело в том что в "testone" кол-во байтов больше чем в "test"

Когда кол-во байт. которое тебе нужно больше оригинального - то обязательно делается прыжок (при прыжке производится выравнивание, если оно нужно) на выделенную тобой память  и там уже делаешь, что тебе нужно с возвратом в ориг. код.

Ссылка на комментарий
Поделиться на другие сайты

14 часов назад, karlgalagger сказал:

когда я выполняю замену это производит краш

Листингом делись, где замену хочешь произвести и на что.  Да, и желательно, что бы рядом стоящий код был. 

Ссылка на комментарий
Поделиться на другие сайты

 

2 часа назад, Garik66 сказал:

Когда кол-во байт. которое тебе нужно больше оригинального - то обязательно делается прыжок (при прыжке производится выравнивание, если оно нужно) на выделенную тобой память  и там уже делаешь, что тебе нужно с возвратом в ориг. код.

Можно больше информации об таком прыжке? Как мне выделить память? malloc? 

Ссылка на комментарий
Поделиться на другие сайты

12 минут назад, LIRW сказал:

Листингом делись, где замену хочешь произвести и на что.  Да, и желательно, что бы рядом стоящий код был. 

Я делаю программу которая изменяет текст в сторонней программе на произвольный,  всё работает если новый текст <= оригинального. Когда же он больше в памяти задевается то что трогать не надо. Я думаю в коде смысла нет..

Изменено пользователем karlgalagger
Ссылка на комментарий
Поделиться на другие сайты

Тебе нужно найти место в программе, которое обращается к адресу этого твоего слова, и там подменить адрес на новую строку, которую ты, разумеется, должен писать куда-то в другое место.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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