Page 12 of 15

Re: C--

Posted: Wed May 14, 2014 10:21 pm
by Alexus
Приветствую, почему-то не получется из С-- обратиться к SysFn68.22, не подскажете где ошибаюсь?

char *buff_name="SHELLY";
result=createMemoryBuffer(buff_name, 1024*16, SHM_OPEN_ALWAYS);
closeMemoryBuffer(buff_name);

int createMemoryBuffer(dword name, int size, dword flags) {
$mov eax,68;
$mov ebx,22;
ECX=name;
EDX=size;
ESI=flags;
$int 0x40
return EDX;
}
void closeMemoryBuffer(dword ECX) {
$mov eax,68;
$mov ebx,23;
$int 0x40
}

Долго боролся получая ошибку 33(Неправильные параметры), теперь имею 30(Не хватает памяти, что сомнительно тк её 4гб).

Re: C--

Posted: Wed May 14, 2014 10:42 pm
by Mario_r4
68.11 ?

Re: C--

Posted: Wed May 14, 2014 11:11 pm
by Alexus
Mario_r4 wrote:68.11 ?
Разьве они связаны? В описании прописаны 12 и 13 только как связанные...

Re: C--

Posted: Wed May 14, 2014 11:35 pm
by 0CodErr
Alexus wrote:Разьве они связаны? В описании прописаны 12 и 13 только как связанные...
http://websvn.kolibrios.org/filedetails ... ]Замечания:
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.[/quote] http://websvn.kolibrios.org/filedetails ... te]Remarks:
* Before this call one must initialize process heap by call to
subfunction 11.[/quote]

Re: C--

Posted: Wed May 14, 2014 11:53 pm
by Alexus
Все получилось, спасибо, надо поправить в Wiki, там этот момент отсуствует.

Re: C--

Posted: Thu May 15, 2014 12:17 am
by punk_joker
Alexus wrote:Все получилось, спасибо, надо поправить в Wiki, там этот момент отсуствует.
Где надо поправить? Да и обертки для функций работы с память для С-- давно уж как написаны http://websvn.kolibrios.org/filedetails ... ib%2Fmem.h

Re: C--

Posted: Thu May 15, 2014 9:41 am
by Alexus
В wiki которая первая выходит в гугле по запросу kolibrios api:
http://wiki.kolibrios.org/wiki/SysFn68/ ... 1.81.D0.B0.

Эти обертки я видел, для 22 и 23 подфункции там нет.

P.S. Нашел "You can find the latest API documentation in /kernel/docs/ in the SVN repository (WebSVN)" , извиняюсь. Но оберток все равно нет для 22 и 23 =).

Re: C--

Posted: Thu May 15, 2014 1:24 pm
by Alexus
Есть ли где-нибудь примеры использования именованной области на С--? Вроде все правильно сделано и EDX=0(ошибки нет), но при этом EAX вместо адреса именованной области отдает 0, что значит ошибку =\

Re: C--

Posted: Thu May 15, 2014 2:05 pm
by 0CodErr
Alexus, ты бы лучше привёл конкретный код.
Пока что, если исходить из кода, приведённого несколькими постами выше:
Alexus wrote:return EDX;
скорее всего будет преобразовано в

Code: Select all

mov eax, edx
при создании новой области (SHM_CREATE или SHM_OPEN_ALWAYS):
edx = 0 - успех, иначе - код ошибки
Ну вот и получается: успех -> edx=0 -> mov eax, edx -> eax=0

Re: C--

Posted: Thu May 15, 2014 5:04 pm
by Alexus
Код: http://pastebin.com/PJjdgPEc , извиняюсь за бардак.

В EAX всегда идет 0, или я чего-то не понимаю или я запутался в указателях =\. Вероятнее всего второе..

Re: C--

Posted: Thu May 15, 2014 5:31 pm
by 0CodErr

Code: Select all

        error=EDX;
; .......................
        return error;

Code: Select all

mov [error], edx
; .......................
mov eax, [error]
Если область создана успешно, то edx=0.
Если edx=0, то после error=EDX в error тоже будет 0.
Если error=0, то после return error в eax тоже будет 0.

Re: C--

Posted: Thu May 15, 2014 5:53 pm
by Alexus
Да, но если область создана то до return её адрес будет в eax,
откуда он записывается в buff,
если ошибки нет error=0, то адрес на который указывает buffer меняется на содержащийся в buff.

Но в итоге при error=0, я имею адрес буфера=0

Re: C--

Posted: Thu May 15, 2014 7:43 pm
by 0CodErr
Может быть, на самом деле, error<>0?

Code: Select all

ECX=*name;
превращается в

Code: Select all

8B4D14                   mov     ecx,[ebp+14h]
0FBE09                   movsx   ecx,[ecx]
последняя команда знаково расширяет байт(0FBE09) по адресу в ecx

в int2str:

Code: Select all

return str;
превращается в

Code: Select all

0FBE8500FFFFFF           movsx   eax,[ebp-100h]
даже если бы возвращался адрес, возвращать адрес на стеке — плохая идея

ну и дальше пошло-поехало :)

Re: C--

Posted: Sun Dec 13, 2015 4:36 pm
by Leency
Базовая поддержка коллекций строк (lib/collections.h)
Коллекции похожи на массивы. Работает все до безобразия просто.

Code: Select all

void main()
{   
	collection s;
	s.init(4096);
	s.add("lorem");
	s.add("ipsum");
	s.add("1234566");
	debugln(s.get(0)); //-> "lorem"
	debugln(s.get(1)); //-> "ipsum"
	debugln(s.get(2)); //-> "123456"
}
Ограничения: максимум 4096 элементов, нужно знать размер буфера заранее.

Пример есть в папке CMM/examples/collections.c

Re: C--

Posted: Thu Jan 07, 2016 7:04 pm
by Leency
+ lib/menu.h
+ examples/menu.c

Стандартный компонент меню и пример использования.