[英]Writing to command line arguments
覆蓋從調用GetCommandLine
函數返回的命令行字符串是否安全(不會引起未定義的行為)?
*(GetCommandLineW() + 1) = L'x'; // should be fine, right?
我不確定是否將返回的字符串視為字符串文字,因為相應內存頁的分配保護屬性似乎有所區別。
MEMORY_BASIC_INFORMATION mbiMemPage;
VirtualQuery(GetCommandLineW(), &mbiMemPage,
sizeof(MEMORY_BASIC_INFORMATION)); // mbiMemPage.Protect = PAGE_READWRITE
VirtualQuery(L"some string", &mbiMemPage,
sizeof(MEMORY_BASIC_INFORMATION)); // mbiMemPage.Protect = PAGE_EXECUTE_READ
GetCommandLineW
返回指向存儲在PEB中的字符串的指針,但這是實現的詳細信息。 在每個發行的Windows NT版本上修改該字符串都是安全的,但這並不意味着它將永遠保持不變。 但是,返回類型是LPTSTR而不是LPCTSTR,因此我發現將來不太可能將其存儲在只讀頁面中。
如果您要冒險,這實際上取決於您。 請記住,您不能超過初始字符串的長度,並且有人可以將您的應用程序重命名為“ x.exe”,然后將其簡單地運行為“ x”,只剩下兩個字符可以使用。
如果只想解析和提取參數,則可以使用CommandLineToArgvW
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.