Реальность крушения 32 битных программ при обращении за 2 гигабайта

Тема в разделе "WASM.SOFTWARE", создана пользователем edemko, 16 янв 2011.

  1. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Привет.
    Видел и сам так делал: neg reg // lea reg,[reg...].
    Дома 512 МБайт памяти.
    Если запустить на карте с двумя гигабайтами, возможен облом?
    Следует избегать neg, not?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Она крешится не от того, что не хватает памяти, а из-за того что лезете в ядрёную память.
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    neg reg, not reg и lea к памяти не обращаются же, вроде
     
  4. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Не обращаются.
    К примеру слаживаю адрес: (neg или not числа_большего_2_гиг) + число.
    А еще бы хотелось инструкцию xsub, нужа она?
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Не может такого быть. Что за компилятор? Код в студию.
    Пишите "при обращении", а потом в отказ.
     
  6. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    LEA к памяти не обращается. ТС а бинарик который крешится можно посмотреть?
     
  7. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Имелось ввиду сложение адреса после neg // not - получится ли валидный потом.
    Теоретически :)

    Разобрался: любое число, описуемое неким количеством бит, можно вычесть от ноля(neg). При этом может выйти знаковое переполнение, но сложение такого результата с другим числом(считаемое беззнаковым) дает правильный результат(считаемый беззнаковым):
    Код (Text):
    1. CPU Disasm
    2. Address   Hex dump        Command                       Comments
    3. 00401007    B8 FFFFFFFF   mov     eax,-1                ; изначальное
    4. 0040100C    BB FEFFFFFF   mov     ebx,-2                ; любое число
    5. 00401011    F7DB          neg     ebx
    6. 00401013    01D8          add     eax,ebx               ; конечное
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    edemko
    ты под веществами? :)
     
  9. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Блин, чел, без обид, но ты зарегался на вазме чуть больше, чем год назад, написал за это время 400 сообщений(а это по одному в день) и до сих пор не представляешь виртуальную адресацию в видовозе? О чем жеж ты тогда писал и что мог тут читать о_О ? Не, ну просто такие вопросы один раз читаются в msdn\ddk\google, причем лучше всего перед тем как писать код =) и больше никогда они не всплывает в жизни =(
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Я в шоке.