Расположение в памяти x32

Тема в разделе "WASM.BEGINNERS", создана пользователем punxer, 6 апр 2011.

  1. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Записали мы
    Код (Text):
    1. char var1 = {'1','2','3','4'};
    в памяти мы увидим 4321 или 3412?
     
  2. freyr

    freyr New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2010
    Сообщения:
    95
    ничего не увидим, потому что если это си, то синтаксис не верный, даже если написать верно

    Код (Text):
    1. char var1[] = {'1','2','3','4'};
    то в памяти никак не будет никаких 1 2 3 4 итп цифр разве что случайно )

    потому что '1' == 0x31

    и вообще трудно самому глянуть что-ли ?

    Код (Text):
    1. char var1[] = {'1','2','3','4'};
    2. printf("%X\n", *(DWORD*)&var1);
    или это стёб и я не заценил ?
     
  3. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    я имелл ввиду если в коде "ADCD" строка, в каком случае будет CDAB а в каком DCAB переводя из кодов обратно в символы.
    ворды или байты меняются
    Имеетс ввиду что мы видим в статическом анализе в хексе
     
  4. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    в общем, если твою строку представить как 0x31 0x32 0x33 0x34 ("1234"), и записать в память, то она расположится так: 0x34 0x33 0x32 0x31 ("4321"). Если же снова считывать из этой памяти, то ты получишь первоначальное значение.

    char var1 = {'1','2','3','4'}; - непонятно, где здесь неверный синтаксис, всё норм. Можно считать, как один из вариантов сохранения строки в стэке (удобно для мутации кода).
     
  5. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    pr0mix
    ну за исключением ноля в конце для строки)
     
  6. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    pr0mix
    вариантов 3412 нет?
     
  7. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    freyr
    звезду упустил
     
  8. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    можно =)
    например, если будешь записывать вордами
     
  9. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    то есть

    DWORD x= 0x1234
    будет 3412?

    сорри нет желания щас лезть в отладчик
     
  10. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    это все касательно си\++
    зависит от компилера? или? или не касательно си? В чем причина?
    Ну простите не дочитал чутка в свое время
     
  11. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    если рассмотреть конкретно твой пример, то да:
    ...
    mov word ptr [405000], 1234h ;[405000] = 0x34, [405001] = 0x12

    если всё правильно по терминологии, то это не зависит от компилера, это архитектура процов от интел
     
  12. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    pr0mix
    а причина писать по меньшему адресу больший из буфера?
     
  13. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    отредактировал прошлый пост
     
  14. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    pr0mix
    соотве6тственно меняется местами половины того что перемещаем
    эх давно они меня ждали в папке to look at
     
  15. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    а точнее, все числа записываются в обратном порядке следования заданных байт, то есть, например, 0x12345678 будет в памяти: 0x78 0x56 0x34 0x12 (4 байта).
     
  16. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    то есть обратен только порядок байт все таки
     
  17. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    да, поэтому если тебе нужно как-то по особому разместить строку в памяти, то эту задачу должен решить именно ты
     
  18. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    pr0mix
    это то очевидно, просто были заблуждения. Огромное спасибо.
     
  19. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    ?
     
  20. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    всмысле отдельными инструкциями?