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 функцию. Переписал на православный асм и всё равно падает:
В моем ассемблерном исходнике который я написал по мотивам твоего кода, выложенного в самом первом сообщении, проблем с выводом не наблюдается. Если ты в нем получишь те эффекты, которые ты пытаешься показать, то я буду разбирать ситуацию.
f4img.7z (6.97 KiB)
Downloaded 251 times

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:Image
Пока нового 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, можно написать вместо

Code: Select all

proc MyProc
ret
endp
просто метку

Code: Select all

MyProc:
ret

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 в структуре является
    указателем на имя функции, второй содержит адрес функции.