Page 52 of 77
Re: Помогите новичку
Posted: Tue Apr 09, 2013 9:26 pm
by Mario_r4
SVN r.3462 решает проблему с падением.
Leency wrote:Проблема у меня при указании параметра Х. Если он 0 или 2 рисует такое. При 10 чёрный фон ("надписи" не видно). При 36, как и должно быть - падает. QEMU, последнее ядро.
А ты выведи не "-----", а допустим "AAAAAA" и сразу поймешь, что происходит искажение вывода, если не править еще и ф.65. А если не править одновременно размер буфера выделяемый по malloc, то возможно получить page fault как для ф.4, так и для ф.65.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 9:30 pm
by Leency
Я ни разу не вводил "-----". В теме раз 5 сверкал исходник и тебе его ещё пару раз кидал, мог бы хоть раз обратить внимание на текст.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 9:55 pm
by Mario_r4
Leency wrote:Я ни разу не вводил "-----". В теме раз 5 сверкал исходник и тебе его ещё пару раз кидал, мог бы хоть раз обратить внимание на текст.
Тогда я не понимаю чего ты от меня хочешь?
Продолжаю мучить 4 функцию. Переписал на православный асм и всё равно падает:
В моем ассемблерном исходнике который я написал по мотивам твоего кода, выложенного в самом первом сообщении, проблем с выводом не наблюдается. Если ты в нем получишь те эффекты, которые ты пытаешься показать, то я буду разбирать ситуацию.
Re: Помогите новичку
Posted: Fri Apr 12, 2013 6:52 pm
by Leency
Смотрю семинар по ОС деву от главного разработчика ядра ReactOS Брагина и кажется до меня начинает доходить что есть квант времени для процесса.
Рассмотрим случай, когда мы имеем два процесса запущенных одновременно и выводящих в консоль цифры от 1 до 9000.
Ровно через 3 секунды вывод останавливается. Так вот программа, которая будет иметь больший квант времени напечатает больше цыфр?
Re: Помогите новичку
Posted: Fri Apr 12, 2013 6:59 pm
by SoUrcerer
Цифры - от 1 до 9. 1 до 9000 - это числа.

Re: Помогите новичку
Posted: Fri Apr 12, 2013 7:08 pm
by Leency
SoUrcerer wrote:Цифры - от 1 до 9. 1 до 9000 - это числа.

Возьми с полки пирожок

Re: Помогите новичку
Posted: Fri Apr 12, 2013 7:53 pm
by srx
Leency wrote:Смотрю семинар по ОС деву от главного разработчика ядра ReactOS Брагина и кажется до меня начинает доходить что есть квант времени для процесса.
Рассмотрим случай, когда мы имеем два процесса запущенных одновременно и выводящих в консоль цифры от 1 до 9000.
Ровно через 3 секунды вывод останавливается. Так вот программа, которая будет иметь больший квант времени напечатает больше цыфр?
ну... как сказать... во первых кванты обычно одинаковые, а приоритет влияет на чистоту выдачи кванта
во вторых кванты очень мелкие, так что разница не настолько уж и ощутима за 3 секунды то.
но теоретически таки да, если я конечно правильно понимаю, что процессы запущены из одного исполняемого файла. если нет - то тут ещё и насколько коды программ оптимальны оттносительно друг-друга (т.е. можно ли сказать что один оптимальнее другого)
Re: Помогите новичку
Posted: Mon Apr 22, 2013 12:37 am
by 0CodErr
Можно ли сейчас узнать размер свободного пространства на жёстком диске?
Здесь
http://websvn.kolibrios.org/filedetails ... #line-3038 написано, что можно:
Spoiler:
Code: Select all
* для жёсткого диска: база и раздел определяются подфункциями 7 и 8
функции 21:
* eax = 0 (успех)
* ebx = общее число кластеров
* ecx = число свободных кластеров
* dword [fileinfo] = размер кластера (в байтах)
А здесь
http://websvn.kolibrios.org/filedetails ... c#line-175 вот так:
Spoiler:
Code: Select all
fs_info: ;start of code - Mihasik
push eax
cmp [eax+21], byte 'r'
je fs_info_r
cmp [eax+21], byte 'R'
je fs_info_r
mov eax, 3 ;if unknown disk
xor ebx, ebx
xor ecx, ecx
xor edx, edx
jmp fs_info1
fs_info_r:
call ramdisk_free_space;if ramdisk
mov ecx, edi ;free space in ecx
shr ecx, 9 ;free clusters
mov ebx, 2847 ;total clusters
mov edx, 512 ;cluster size
xor eax, eax ;always 0
fs_info1:
pop edi
mov [esp+36], eax
mov [esp+24], ebx ; total clusters on disk
mov [esp+32], ecx ; free clusters on disk
mov [edi], edx ; cluster size in bytes
ret ;end of code - Mihasik
Для рамдиска-то работает:
Spoiler:

Пока нового API нет, хотел хотя бы так попробовать.
Re: Помогите новичку
Posted: Thu May 02, 2013 5:42 pm
by GerdtR
Мне нужно, что бы fasm вкомпилил процедуры типа proc - endp. Загвоздка вот в чём: в самой проге они не используются и потому fasm их просто выкидывает. А мне нужно что бы вкомпилил.
Re: Помогите новичку
Posted: Thu May 02, 2013 6:21 pm
by 0CodErr
GerdtR, можно написать вместо
просто метку
Re: Помогите новичку
Posted: Fri May 03, 2013 4:56 am
by Freeman
GerdtR wrote:Загвоздка вот в чём: в самой проге они не используются и потому fasm их просто выкидывает. А мне нужно что бы вкомпилил.
Скомпиль их отдельно в бинарь, а потом включи директивой file. Только про смещения не забывай.
Re: Помогите новичку
Posted: Sat May 04, 2013 9:03 pm
by GerdtR
Слыхал, что 68.19 умеет грузить PE либы. Попробовал - не получилось( Вообще есть какой способ PE либу загрузить?
Re: Помогите новичку
Posted: Sun May 05, 2013 10:53 am
by srx
GerdtR wrote:Слыхал, что 68.19 умеет грузить PE либы. Попробовал - не получилось
Либы - т.е. .lib? Имеются ввиду .obj , если я правильно помню
+ ещё какие зависимости у этой либы
Вообще есть какой способ PE либу загрузить?
Ну... можно и свой загрузчик сделать, а если имеется ввиду таки .dll то порыться в коде раеактос или вайн, скопировать тамошний загрузчик
Re: Помогите новичку
Posted: Sun May 05, 2013 11:14 am
by GerdtR
Да, .dll, вроде виндовых. Т. е. библиотеки в PE формате сама Колибри грузить не умеет?
Re: Помогите новичку
Posted: Sun May 05, 2013 1:32 pm
by Mario_r4
GerdtR
viewtopic.php?f=2&t=32&start=175
Serge wrote:Добро пожаловать в DLL hell!
Фунция 68.19 - загрузить DLL. ecx - указатель на путь к библиотеке.
Возвращаемое значение - логический номер DLL в случае успеха или 0.
http://infinity-sound.narod.ru/console.7z - пример DLL
консоли.
ДЛЛ может состоять из нескольких COFF секций. Кождая DLL должна иметь таблицу экспортируемых функций. Метка EXPORTS должна быть объявлена public. Обязательная функция stdcall START должна вызываться с параметром state=1 после загрузки DLL и state=-1 перед выгрузкой. Функция должна вернуть ненулевое значение в случае успхе или ноль в случае неудачи. Каждая DLL должна содержать номер версии (экспоруемое имя 'version'). Младшее слово версии - текущая версия DLL, старшее слово - минимальная совместимая версия. Программа может работать с DLL если требуемая версия не больше текущей и не меньше совместимой. Таблица EXPORTS состоит из пар двойных слов. Первое - указатель на строку с именем переменной, второе значение. Экспортироваться могут не только адреса функций но и непосредственные данные как в случае с 'version'. В файл testcon2 добавлены две вспомогательные функции для работы с DLL. get_proc возвращает адрес экспортируемой переменной sz_name. link связывает библиотеку и программу. Для этого необходима таблица импортируемых функций (в примере imports). link заменяет адреса строк с именами функций на значения полученные после вызовов get_proc
sysfuncr.txt wrote:
Code: Select all
======================================================================
============= Функция 68, подфункция 19 - загрузить DLL. =============
======================================================================
Параметры:
* eax = 68 - номер функции
* ebx = 19 - номер подфункции
* ecx = указатель на ASCIIZ-строку с полным путём к DLL
Возвращаемое значение:
* eax = 0 - неудача
* иначе eax = указатель на таблицу экспорта DLL
Замечания:
* Таблица экспорта представляет собой массив структур по 2 dword'а,
заканчивающийся нулём. Первый dword в структуре является
указателем на имя функции, второй содержит адрес функции.