Serge wrote:YasonДва потока tinypad используют одну область памяти для командной строки при вызове fasm и в качестве буфера для сохранения информации о процессе fn.9 Синхронизация доступа отсутствует. Результат немного предсказуем.
Ясно.
Serge
В свежей н.с., всё работает штатно. Спасибо за исправления.
Есть подозрение что сист. ф. 68.20 - перераспределить блок памяти в случае не возможности выделить новую память возвращает в eax не 0 как написано в документации, а значение из указателя edx при входе в функцию.
Пробовал в virtualbox создавать виртуальную систему с памятью 128 Мб. Запускал в ней программу animage, которая выделяла 210 Мб (5 буферов под фотографию 14 Мп), и программа вела себя нормально не выдавая никаких сообщений о нехватке памяти. Потом при попытках редактирования изображения сразу закрывалась, очевидно лезла на нехватающую память.
IgorA
Там скорее другое. Память выделяется не сразу, а по мере обращения к страницам, в обработчике страничных ошибок. Когда обработчик не может выделить новую страницу он прибивает процесс.
Писал программу и заметил баг, связанный с сис. функцией 47 (вывод числа в окно). Тест, проводил на реальном железе.
Если в функции, установить бит увеличения шрифта, с любым множителем, кроме нулевого (например: 0x11ff0000), то, если после этого, попытаться передвинуть окно, больше 1 раза, то окно, намертво виснет. Или может, я чего напутал? Доска отладки, ничего не показывает.
======================================================================
========== Функция 68, подфункция 12 - выделить блок памяти. =========
======================================================================
Параметры:
* eax = 68 - номер функции
* ebx = 12 - номер подфункции
* ecx = требуемый размер в байтах
Возвращаемое значение:
* eax = указатель на выделенный блок
Замечания:
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.
* Функция выделяет целое число страниц (4 Кб) так, что фактический
размер выделенного блока больше или равен запрошенному.
---------------------- Константы для регистров: ----------------------
eax - SF_SYS_MISC (68)
ebx - SSF_MEM_ALLOC (12)
Я написал программу, она пытается сделать malloc очень большого размера и на выходе я ожидаю нолу, а получаю какое-то число.
Ядерщики, посмотрите, пожалуйста.