簡體   English   中英

寫入命令行參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM