Мне нужно знать, как увеличить размер строки в сборке? - PullRequest
0 голосов
/ 30 апреля 2020

.rodata:00014844 aFpebfmj1fre5fm DCB "FpebFmJ1FRe5FmTbGRDnGQ==",0

Я использовал шестнадцатеричный редактор для добавления байта, но не работал.

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

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

Способы сделать это:

  1. Перестроить код из источников (но я полагаю, что ваша цель проприетарна)
  2. Измените адрес строки во всех ссылках кода (иногда - ссылки на данные).

Второй метод требует поиска нового адреса для строки, и у вас есть варианты:

  1. Найдите неиспользованную строку / данные в разделе родата. Например, сообщение об исключении при завершении программы (на практике, если происходит сбой программы, вам не нужно описание причины - исключение, если вы автор этой программы, но в этом случае у вас есть источники)
  2. Найти выравнивание по размеру в конец раздела / сегмента. Некоторые компиляторы оставляют свободное место после всех данных по умолчанию. Например, общая длина вашей программы равна 0x5780, но компилятор установил размер сегмента для выравнивания 0x6000. В этом случае у вас есть 0x6000 - 0x5780 байт.
  3. Добавление нового сегмента / раздела в файл. Есть пара инструментов, и после прочтения описания ELF / PE / mach-o вы сможете создать свой собственный.

Эти вещи занимают много времени, но не годы. Если у вас есть базовые c знания по сборке - например, недели и месяцы для изучения деталей.

2 голосов
/ 30 апреля 2020

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

Чтобы освободить место для дополнительных байтов, необходимо переместить все, что находится по более высокому адресу (в все разделы).

Чтобы переместить все, что находится по более высокому адресу, вы не можете просто переместить байты - вы также должны изменить каждую инструкцию, которая содержит адрес, к данным, которые были перемещены.

Чтобы изменить каждую инструкцию, которая содержит адрес для данных, которые были перемещены, у вас есть 2 варианта:

  • Перекомпилировать / собрать / заново связать всю вещь из ее исходного исходного кода.

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

...