Цитата:
Сообщение от L0rd
Вот как все происходит. Точка входа в любое приложение - библиотечная функция mainCRTStartup() - она считывает указатель на командную строку запускаемого приложения, выполняет всю необходимую инициализацию, формирует переменные argc и argv, а затем вызывает нашу функцию main().
|
Ну вот это уже ближе к телу, приблизительно так я себе и представлял... Теперь, подскажите еще какой библиотеки эта самая функция mainCRTStartup()? Было бы логично предположить что glibc, но я грепнул его сурсы - нету. Посмотрел также в ядре... Где искать-то ее исходник?
Цитата:
Сообщение от L0rd
Опять же, смотря в каком контексте - если внутри программы есть код, который обрабатывает командную строчку (читая из argc и argv) - то подмена указателей проходит.
|
Собственно для этого я и собираюсь его подменить, т.к. идет сопряжение с Сишным АПИ, и мне именно в argv надо запихать свой аргумент. И я больше спрашивал не подходит ли, это я предположил что подойдет сам, я спрашиваю,
можно ли, менять этот указатель? Нет ли у него опять какого-то статуса особого? Я думал что и просто перераспределить память его можно...
Цитата:
Сообщение от L0rd
Даже если, что-то опять пойдет не так - например, при завершении программы - можно просто сохранить старое значение указателя и восстановить перед выходом.
|
Не очень понял что пойдет не так? Тут конечно может быть утечка памяти (ну я же не могу высвободить память истинного argv как выяснилось), но Вы правы, именно к концу программы, и это получается уже совершенно не критично - по завершению вся память полюбому вернется системе. Или нет? Для чего еще я должен был бы восстанавливать этот указатель в прежнее значение?