Сейчас на форуме: (+8 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Срока в массиве. Как найти? |
Посл.ответ | Сообщение |
|
Создано: 27 мая 2014 10:54 · Поправил: SaNTa76 · Личное сообщение · #1 Вопрос по размеру и хранению в памяти данных: Code:
В первом случае str покажет 5 байт - тут понятно. 4 символа и нуль-терминал. Во втором случае покажет 6. Почему? Второй вопрос. Если посмотреть в HEX редакторе как хранятся строка (str2) и первый массив (str) , то строка так и будет хранится в прямом виде, а массив разделен тремя байтами C6, 45, F1. Тогда получается первый массив в реальности занимает больший объем чем строка? Ну и вопрос по поиску строк оформленных первым способом. Как в той же ольге или hexе правильно искать такие строки? ЗЫ. Ну и как исправить заголовок темы? Щас чую начнется стёб ![]() ![]() |
|
Создано: 27 мая 2014 11:08 · Личное сообщение · #2 |
|
Создано: 27 мая 2014 11:08 · Личное сообщение · #3 Во втором случае покажет 6 потому что у вас лишний null, загляните в память и вам все станет ясно. 1 случай - 50 41 53 53 00 (Используется посимвольная инициализация тут все верно) 2 случай - 50 41 53 53 00 00 (Используется ASCIZ-строка, т.е нуль-терминированная строка, 0 добавляется автоматически) ![]() |
|
Создано: 27 мая 2014 12:06 · Поправил: Initial · Личное сообщение · #4 |
|
Создано: 27 мая 2014 12:46 · Личное сообщение · #5 Всё! спасибо разобрался Code:
Насчет здравого ума и оформления строки в виде 1... А почему бы и нет... Я как новичек например такую строку не нашел бы в какомнить крякмисе... через "Search for -> All referenced text string" Но вопрос остается про реальную размерность. Получается sizeof "врет" насчет занимаемой памяти... ![]() P.S. Данные строки из учебника и не являются моим бредом ![]() ![]() |
|
Создано: 27 мая 2014 12:56 · Поправил: Initial · Личное сообщение · #6 |
|
Создано: 27 мая 2014 13:16 · Личное сообщение · #7 |
|
Создано: 28 мая 2014 01:41 · Личное сообщение · #8 |
|
Создано: 28 мая 2014 02:08 · Личное сообщение · #9 Dr0p пишет: Это только мне глаза вырезает ? В меньшей степени чем "срока". ![]() ![]() |
|
Создано: 28 мая 2014 11:32 · Личное сообщение · #10 |
|
Создано: 28 мая 2014 17:54 · Личное сообщение · #11 |
|
Создано: 28 мая 2014 18:33 · Личное сообщение · #12 |
|
Создано: 29 мая 2014 03:04 · Поправил: dosprog · Личное сообщение · #13 Kindly пишет: Initial, экономнее DS Автоматические переменные - только в SS. Для них и генерируется такой код инициализации. Иначе просто сгенерируется целая строка в DS или в CS. SaNTa76 пишет: Ну и вопрос по поиску строк оформленных первым способом. Как в той же ольге или hexе правильно искать такие строки? Напрашивается поиск в hiew < mov [ebp + ? ] ,50 >. Но это пффф. ![]() |
|
Создано: 29 мая 2014 08:09 · Личное сообщение · #14 |
|
Создано: 30 мая 2014 21:03 · Личное сообщение · #15 |
|
Создано: 03 июня 2014 23:21 · Поправил: Dr0p · Личное сообщение · #16 |
|
Создано: 04 июня 2014 05:15 · Поправил: dosprog · Личное сообщение · #17 Dr0p пишет: Откройте же для себя понятие дефолтных сегментов изучив первый том IA. [offtop] Я говорил об особенности генерации кода компилятором. Если переменная автоматическая, то она размещается в SS. То-есть, если я хочу разместить её в SS, то её нужно объявить автоматической. Специально, чтобы не расходовать память. Например, {auto int a = 5;...} - автоматическая, <auto> можно не указывать. Разместится в стеке при выполнении, при входе в блок {} и инициализируется числом 5. Как и в рассматриваемом здесь случае со строкой. {static int a = 5;...} - статическая, <static> требуется указать. Разместится в коде (может, если <const>) или в данных на этапе компиляции и тогда же проинициализируется значением 5. [/offtop] ![]() |
|
Создано: 04 июня 2014 10:06 · Личное сообщение · #18 |
![]() |
eXeL@B —› Вопросы новичков —› Срока в массиве. Как найти? |