LINUX.ORG.RU

Подмена имени бинарника

 


1

2

Дратути, суть токова - нужно подменить argv[0]. Насколько я помню, именно через memcpy это делается нормально. Вопрос - какова длина строки, которую можно туда безопасно впердолить, и есть ли более цивилизованный способ?

Язык - сишка, если это имеет значение.


Не то, чтобы я был специалистом в С или любом другом языке, но вот это ведь

через memcpy это делается нормально

подразумевает доступ к исходникам? Если так, то **argv это обычный массив, ну и делайте с ним, что угодно. Беглый гуглёж сказал даже, что это не запрещено стандартом.
Минимальная гарантированная безопасная длина строки по стандарту С - вроде бы, 509 символов, но у большинства реализаций больше.

Nirvandil
()

setproctitle

anonymous
()

А зачем, чтобы в списке процессов отображалось? prctl(PR_SET_NAME), но больше 16 символов всё равно обрежутся.

d_a ★★★★★
()
Ответ на: комментарий от d_a

Больше 16 и надо, т.к. ничего не поделаешь - это жопач.

svr4
() автор топика

Подменить свой собственный arv[0] не проблема - но зачем ? Если хотите поменять строчку при просмотре списка процессов (ps) то это не сработает, смысл есть менять argv[0] из какойто прелоад библиотеки чтобы изменить поведение процесса ...

В плане изменения argv[0] - проще поменять сам поинтер чем значения строки:

argv[0] = "My New ARGV0 value";

zaz ★★★★
()

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

zdesnesru
()
Ответ на: комментарий от svr4

Можно делать reexec программы /proc/self/exe с подменённым argv[0]. Но это имеет смысл делать только в самом начале программы. И делать это надо условно, проверив, что argv[0] ещё не подменён.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Но это имеет смысл делать только в самом начале программы.

Это ниоткуда не следует. Например, это единственный способ сделаться демоном на системах без MMU, там нет fork(), но есть vfork(). Такой метод юзается для запуска демонов-воркеров и конроллирующего процесса. Тогда контроллирующий процесс может сколько угодно настраиваться, а потом навызывать в нужное время с нужными именами себя в виде демона.

Проверять argv[0] тоже не всегда возможно по причине того, что самой программе это имя может ни о чём не говорить, первоначальное имя харкодить - плохой стиль. Уж лучше добавлять опцию, да хоть тот же --background, говорящий, что уходить в бэкграунд не надо.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.