2015-03-20 1 views
-1

Моя цель - изменить путь, из которого запускается приложение. У меня нет доступа к main, но я могу свободно запускать код C через ctypes.Изменение argv [0] с winapi

Я смог изменить argv [0] в Solarios с getexecname(), что дало мне указатель на него, в котором я сделал memcpy.

Мне было интересно, есть ли метод в winapi, который позволяет мне найти указатель argv[0] или функцию API, которая его изменила?

Благодаря

+0

Благодаря @HarryJohnston это для Firefox. После установки аддона или других вещей Firefox можно перезапустить. Я не уверен, что он перезапускается, но мне сказали использовать ctypes для изменения argv. – Noitidart

+0

Похоже, что он перезагружается, его с открытым исходным кодом: http://mxr.mozilla.org/mozilla-release/source/toolkit/components/startup/nsAppStartup.cpp#466 – Noitidart

+0

Найденный @Harry! http://mxr.mozilla.org/mozilla-release/source/toolkit/components/startup/nsAppStartup.cpp#301 вызывается отсюда: http://mxr.mozilla.org/mozilla-release/source/toolkit/ компоненты/startup/nsAppStartup.cpp # 984 делает ли это смысл ха-ха? Человек, который сказал мне изменить argv [0], довольно умный парень, который работает в Firefox, поэтому я уверен, что смогу изменить его работу. – Noitidart

ответ

2

на Windows, командная строка находится в ПЭБ (Process Environment Block). Вы, вероятно, не должны изменять его, но вы можете найти его и действовать по нему.

вы можете найти его с помощью GetCommandLine(): https://msdn.microsoft.com/en-us/library/windows/desktop/ms683156(v=vs.85).aspx

и разобрать его либо самостоятельно, либо с помощью CommandLineToArgvW https://msdn.microsoft.com/en-us/library/windows/desktop/bb776391(v=vs.85).aspx - затем запустить новый экземпляр самостоятельно (с помощью CreateProcess или ShellExecute, независимо применимо), и прекратить , Новый экземпляр у вас будет иметь правильные параметры.

+0

Спасибо, сергей! – Noitidart

 Смежные вопросы

  • Нет связанных вопросов^_^