Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2016, 10:38   #11
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

mikado3333, что за компилятор? Не досовский? Вы собираете под винду? Ком или exe?
p51x вне форума Ответить с цитированием
Старый 28.09.2016, 12:14   #12
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Если собирает под винду, то помимо компилятора нужно ещё знать что за линкет.
mikado3333, как называется линкер и его разрядность(16/32/64)?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 28.09.2016, 12:27   #13
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

Большое спасибо Всем что откликнулись. Причину нашел - компилятор Fasm по умолчанию ставит стек 4096 байт. Решение директива stack 1048576. На путь решения натолкнул waleri - "
Цитата:
Сообщение от waleri Посмотреть сообщение
Сколько указано в ЕХЕ файле.
- ему отдельное спасибо.
mikado3333 вне форума Ответить с цитированием
Старый 28.09.2016, 14:27   #14
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

Поторопился! Максимальный размер стека изменился в заголовке(Size of Stack Reserve), но ситуация не изменилась. Как я понял т.к. Size of Stack Commit не изменился и остался 4096. Вопрос открыт!
mikado3333 вне форума Ответить с цитированием
Старый 28.09.2016, 14:51   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

скорее всего из-за того что вы слишком сразу его весь пытаетесь взять.
по-странично сделайте доступ(хоть просто записать-прочесть).

или воспользуйтесь уже нормальным методом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.09.2016, 21:09   #16
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

Задал этот же вопрос на родном сайте fasm. Получил следующий ответ

"There is no maximum local stack size except until you run out of memory, or you exceed the stack limit.

But be aware of the guard page that Windows uses to monitor stack growth and allocate new pages. You need to either statically allocate the stack by using the "stack maximum,allocated" directive or touch the stack from the top down one page at a time before trying to use it. Otherwise your program will crash with an invalid memory access.

So for your case you can use "stack 1048576,1048576" to avoid the access error."

Понятно что нужно использовать "stack 1048576,1048576" , а не "stack 1048576".
Вот только со вторым вариантом (" or touch the stack from the top down one page at a time before trying to use it.") не совсем понятно - это надо разбить буффер на под буферы?

Код:
buf1 rb 4096
buf2 rb 4096
buf3 rb 4096
buf4 rb 4096
mikado3333 вне форума Ответить с цитированием
Старый 28.09.2016, 21:32   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нет, это надо прочитать вторую строку моего предыдущего поста.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.09.2016, 22:08   #18
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

"stack 1048576,1048576" заработало. А как выделить стек по странично если он и так 4096 - стр. в windows. Подскажите с кого "конца" подойти к этому выделению страниц? HeapAlloc - создать свой стек?
mikado3333 вне форума Ответить с цитированием
Старый 28.09.2016, 22:13   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Heap это куча, а не стек.

во вторых, что я что на FASM вам сказали о постраничном доступе к стеку.
то есть mov [esp+4096],eax
mov [esp+9192], eax и тп в цикле.(адреса я скорее всего неверно описал, но смысл должен быть ясен, начинать надо от корня фрейма)
до нужного размера, заставит реально выделить весь этот стек(стек все таки обычно растет по чучуть)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.09.2016, 23:23   #20
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

т.е. не указывать локальный буфер явно, и если нужно оттянул esp назад на размер страницы и потом уже пиши в страницу?
mikado3333 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
asio: установить размер буфера в примере HTTP клиента soulmare C/C++ Сетевое программирование 0 03.11.2010 19:44
Какой размер приемного буфера у сокета meganom Работа с сетью в Delphi 3 01.09.2010 21:45
DSPack: размер буфера, частота кадров RGV Мультимедиа в Delphi 3 20.11.2009 13:23
Максимальный размер занимаемой памяти Alex Cones Общие вопросы Delphi 8 06.05.2009 22:37
максимальный размер массива в 32-битной оси Adamant Свободное общение 5 03.12.2008 21:14