Организация кучи с CMD - Параметры - PullRequest
0 голосов
/ 29 января 2019

У меня следующий вопрос:

Предположим, у меня есть 64-битная машина Windows.Я вызываю приложение с параметром командной строки "xyz".Как будет выглядеть моя куча.Я понимаю, что строка будет храниться в куче, а адрес будет храниться в стеке.

Будет ли она использовать 64 бита для одного символа или как она организована?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

В сборке нет такого понятия, как куча.
Под Windows командная строка хранится где-то 1 , и приложение может получить указатель на нее с помощью GetCommandLineA или GetCommandLineW.
Обратите внимание, что аргументы не обрабатываются, как в C или Linux, командная строка представляет собой одну строку.

GetCommandLineA возвращает строку из 8-битных байтов с использованием кодировки системы, например, CP1252.
GetCommandLineW возвращает строку кодовых единиц UTF16, поэтому она не зависит от локали.

Обратите внимание, что в шрифте командной строки отсутствует глиф для нескольких символов (например, для ) с использованием символа замены ?, но байтовые / кодовые единицы обрабатываются правильно.


1 Он находится в структуре _RTL_USER_PROCESS_PARAMETERS в PEB, как UNICODE_STRING.Он конвертируется в DllMain из kernelbase.dll.

0 голосов
/ 29 января 2019

Строковое представление в куче зависит от кодовой страницы, которая использовалась исполняемым файлом, без учета битности.

...