Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Feb 21, 2020 10:55 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 56 posts ]  Go to page Previous 1 2 3 4
Author Message
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 17, 2008 8:54 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Я смотрю в IDA.

barsuk

Ничего не изменилось. Те же внешние ссылки.
Легко проверяется и в Колибри. Всё выводится на доску отладки в "User". Вот простой загрузчик. Только надо исправить путь к длл.
Code:
include 'proc32.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd mem
dd mem
dd 0
dd 0

start:
           mov  eax, 68
           mov  ebx, 19
           mov  ecx, sztest
           int  0x40
           test eax, eax
           jz   .fail

           mov  edx, eax
           mov  esi, px_import
.import_loop:
           lodsd
           test eax, eax
           jz   .import_done
           push edx
.import_find:
           mov ebx, [edx]
           test ebx, ebx
           jz .fail         ;import_not_found

           push eax
@@:
           mov cl, [eax]
           cmp cl, [ebx]
           jnz .import_find_next

           test cl, cl
           jz .import_found

           inc eax
           inc ebx
           jmp @b
.import_find_next:
           pop eax
           add edx, 8
           jmp .import_find
.import_found:
           pop eax
           mov eax, [edx+4]
           mov [esi-4], eax
           pop edx
           jmp .import_loop
.import_done:

.fail:
           mov eax, -1
           ret

sztest   db  '/hd0/1/sqlite.obj',0

sz_sqlite_open   db 'sqlite_open',0
sz_sqlite_exec   db 'sqlite_exec',0

align 4
px_import:

imp_sqlite_open     dd  sz_sqlite_open
imp_sqlite_exec     dd  sz_sqlite_exec
                    dd  0
i_end:
align 4
rb 128 ; stack
mem:

Ещё вариант - слинковать в екзешник без страндартных библиотек. Link будет жаловаться на все внешние ссылки.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Tue Nov 18, 2008 12:06 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 231
Как мы подключали эту библиотеку к HiAsm.

Код на Дельфи:
Code:
  {$L 'SQLiteObj\sqlite3_3_4.obj'}
  {$L 'SQLiteObj\_ll.obj'}
  {$L 'SQLiteObj\_ftoul.obj'}
  {$L 'SQLiteObj\ftol.obj'}

// Stubs for external C RTL functions

const MSVCRT = 'msvcrt.dll';

function _malloc(size: Integer): Pointer; cdecl;
begin
  GetMem(Result, size);
end;

function _realloc(P: Pointer; size: Integer): Pointer; cdecl;
begin
  Result := P;
  ReallocMem(Result, size);
end;

procedure _free(P: Pointer); cdecl;
begin
  FreeMem(P);
end;

procedure __ltolower; cdecl; asm int 3; end; // not used
procedure __ltoupper; cdecl; asm int 3; end; // not used

procedure _localtime; external MSVCRT name 'localtime';
procedure _getenv; external MSVCRT name 'getenv';
procedure _sprintf; external MSVCRT name 'sprintf';
procedure _memcmp; external MSVCRT name 'memcmp';
procedure _memcpy; external MSVCRT name 'memcpy';
procedure _memset; external MSVCRT name 'memset';
procedure _strlen; external MSVCRT name 'strlen';
procedure _strcmp; external MSVCRT name 'strcmp';
procedure _strcpy; external MSVCRT name 'strcpy';
procedure _strncmp; external MSVCRT name 'strncmp';
procedure _strncpy; external MSVCRT name 'strncpy';
procedure _strcat; external MSVCRT name 'strcat';
procedure _isspace; external MSVCRT name 'isspace';
procedure _isalnum; external MSVCRT name 'isalnum';
procedure _isdigit; external MSVCRT name 'isdigit';
procedure _isxdigit; external MSVCRT name 'isxdigit';
procedure _atol; external MSVCRT name 'atol';

function _wsprintfA:integer; external 'user32.dll' name 'wsprintfA';
procedure RtlUnwind; external 'NtDll.dll' name 'RtlUnwind';

var
  __turboFloat: LongBool = False;
  __streams: Pointer = nil;


Тут нет только ОС-зависимых функций, которые описаны в соответствующем файле SQLite и которые подключались из стандартного модуля API windows.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 24, 2008 1:46 am 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Библиотека, хотя и ругается на unresolved externals, все равно загружается. Написал клиента, использующего console.obj и sqlite.obj. Все работает (запросы ходят, файлы создаются), но одна проблема: нужно написать callback-функцию, в которую sqlite возвращает результаты запроса. На С я написал без проблем, а на ассемблере не могу достать параметры из стека (не нашел их там). Прототип callback-функции: int __cdecl callback(void *p, int num, char **val, char **col).


Attachments:
client.7z [121.36 KiB]
Downloaded 161 times
Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 24, 2008 2:41 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Главное чтобы не ругался на функции, а так это доп информация которую загрузчик неправильно обрабатывает.
Code:
callback:
          push ebp
          mov ebp, esp
p    equ  (ebp+8)
num  equ (ebp+12)
val   equ (ebp+16)
col   equ (ebp+20)
        push ebx
        push edi
        push esi
       mov eax, [p]
       mov edx, [num]
       mov esi, [val]
       ...

   
если объявлять через proc то буде проще

include 'proc32.inc'

proc callback cdecl, p:dword, num:dword, val:dword, col:dword
        push ebx
        push esi
        push edi

       mov eax, [p]
       mov ebx, [num]


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Fri Dec 05, 2008 5:02 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Наконец удалось сделать отображение результатов запроса. Исходники и kex прилагаются, библиотека используется та же.
Имхо, теперь можно говорить, что в Колибри есть СУБД :)


Attachments:
File comment: обновленный клиент
sql.7z [2.45 KiB]
Downloaded 176 times
Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sat Dec 06, 2008 11:46 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Ну вот теперь можно и отписаться на той страничке :)
Ещё бы знать как ей пользоваться)

_________________
Через тернии к звездам


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sat Dec 06, 2008 5:58 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Leency
Пользоваться так же, как любым движком SQL - отправлять запросы, получать результаты... Почитай что-нибудь по языку SQL (про MySQL тоже можно, но есть отличия).


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sat Dec 06, 2008 9:10 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
Leency, очень удобная штука)

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Dec 07, 2008 10:07 pm 
Offline
User avatar

Joined: Thu Mar 29, 2007 3:02 am
Posts: 249
что-то он у меня не запустился...:(

_________________
*****:
;дух машины, мой бубен сильнее твоей тупости

*****:


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Dec 07, 2008 11:47 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
ДедОк
Нужно достаточно новое ядро.
Что-нибудь на доске отладки появляется при попытке запуска?
Желательно также наличие папки /rd/1/sqlite (иначе базы не будут сохраняться, сейчас прога сама не умеет создавать эту папку).


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Wed Dec 10, 2008 12:01 am 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Добавлены функции sqlite_close() - очевидного назначения, и set_path() - которая позволяет указать путь для хранения файлов sqlite (в примере стоит /hd0/1/sqlite/ - измените и перекомпилируйте, чтобы файлы сохранялись в другом месте); если функция не была вызвана, библиотека сохраняет файлы в /rd/1/ - корне рамдиска.

Небольшой ман по сборке sqlite (написан в частности для себя, поскольку после перерыва не смог вспомнить все шаманство) и руководство программиста в архиве.


Attachments:
sql-2.7z [119.44 KiB]
Downloaded 202 times
Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 56 posts ]  Go to page Previous 1 2 3 4

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited