Приветствую, почему-то не получется из С-- обратиться к 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гб).
C--
-
*.*
68.11 ?
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Разьве они связаны? В описании прописаны 12 и 13 только как связанные...Mario_r4 wrote:68.11 ?
*.*
http://websvn.kolibrios.org/filedetails ... ]Замечания:Alexus wrote:Разьве они связаны? В описании прописаны 12 и 13 только как связанные...
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.[/quote] http://websvn.kolibrios.org/filedetails ... te]Remarks:
* Before this call one must initialize process heap by call to
subfunction 11.[/quote]
Все получилось, спасибо, надо поправить в Wiki, там этот момент отсуствует.
*.*
Где надо поправить? Да и обертки для функций работы с память для С-- давно уж как написаны http://websvn.kolibrios.org/filedetails ... ib%2Fmem.hAlexus wrote:Все получилось, спасибо, надо поправить в Wiki, там этот момент отсуствует.
to infinity and beyond
В 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 =).
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 =).
*.*
Есть ли где-нибудь примеры использования именованной области на С--? Вроде все правильно сделано и EDX=0(ошибки нет), но при этом EAX вместо адреса именованной области отдает 0, что значит ошибку =\
*.*
Alexus, ты бы лучше привёл конкретный код.
Пока что, если исходить из кода, приведённого несколькими постами выше:
Пока что, если исходить из кода, приведённого несколькими постами выше:
скорее всего будет преобразовано вAlexus wrote:return EDX;
Code: Select all
mov eax, edx
Ну вот и получается: успех -> edx=0 -> mov eax, edx -> eax=0при создании новой области (SHM_CREATE или SHM_OPEN_ALWAYS):
edx = 0 - успех, иначе - код ошибки
Код: http://pastebin.com/PJjdgPEc , извиняюсь за бардак.
В EAX всегда идет 0, или я чего-то не понимаю или я запутался в указателях =\. Вероятнее всего второе..
В EAX всегда идет 0, или я чего-то не понимаю или я запутался в указателях =\. Вероятнее всего второе..
*.*
Code: Select all
error=EDX;
; .......................
return error;
Code: Select all
mov [error], edx
; .......................
mov eax, [error]
Если edx=0, то после error=EDX в error тоже будет 0.
Если error=0, то после return error в eax тоже будет 0.
Да, но если область создана то до return её адрес будет в eax,
откуда он записывается в buff,
если ошибки нет error=0, то адрес на который указывает buffer меняется на содержащийся в buff.
Но в итоге при error=0, я имею адрес буфера=0
откуда он записывается в buff,
если ошибки нет error=0, то адрес на который указывает buffer меняется на содержащийся в buff.
Но в итоге при error=0, я имею адрес буфера=0
*.*
Может быть, на самом деле, error<>0?
превращается в
последняя команда знаково расширяет байт(0FBE09) по адресу в ecx
в int2str:превращается в даже если бы возвращался адрес, возвращать адрес на стеке — плохая идея
ну и дальше пошло-поехало
Code: Select all
ECX=*name;
Code: Select all
8B4D14 mov ecx,[ebp+14h]
0FBE09 movsx ecx,[ecx]
в int2str:
Code: Select all
return str;
Code: Select all
0FBE8500FFFFFF movsx eax,[ebp-100h]
ну и дальше пошло-поехало
Базовая поддержка коллекций строк (lib/collections.h)
Коллекции похожи на массивы. Работает все до безобразия просто.
Ограничения: максимум 4096 элементов, нужно знать размер буфера заранее.
Пример есть в папке CMM/examples/collections.c
Коллекции похожи на массивы. Работает все до безобразия просто.
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"
}
Пример есть в папке CMM/examples/collections.c
Из хаоса в космос
+ lib/menu.h
+ examples/menu.c
Стандартный компонент меню и пример использования.
+ examples/menu.c
Стандартный компонент меню и пример использования.
- Attachments
-
-
menu.gif (188.09 KiB)Viewed 13342 times
-
Из хаоса в космос
Who is online
Users browsing this forum: No registered users and 1 guest