Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Oct 28, 2020 3:36 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 17 posts ]  Go to page 1 2 Next
Author Message
 Post subject: Есть вопрос
PostPosted: Tue Oct 07, 2008 12:01 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Как получить физический адрес в программе зная адрес виртуальный?

Пример из Висопсиса (только здесь обратный подход):

Code:
  queueHeadsPhysical = kernelMemoryGetPhysical(USBUHCI_QUEUEHEADS_MEMSIZE, MEMORY_PAGE_SIZE, "usb queue heads");
  // Map it to a virtual address
  status = kernelPageMapToFree(KERNELPROCID, queueHeadsPhysical, (void **) &queueHeads, USBUHCI_QUEUEHEADS_MEMSIZE);



Top
   
PostPosted: Tue Oct 07, 2008 4:39 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Никак. Функция есть, но доступна только из ядра


Top
   
PostPosted: Wed Oct 08, 2008 3:19 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Драйвер эту функцию вызвать сможет?


Top
   
PostPosted: Wed Oct 08, 2008 4:41 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Да. GetPgAddr


Top
   
PostPosted: Wed Oct 08, 2008 4:48 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Большое спасибо Serge. Это как раз то, что мне было нужно. :)


Top
   
PostPosted: Thu Oct 23, 2008 3:03 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Ещё вопрос : программа может узнать каким-либо образом свой адрес в файловой системе?


Top
   
PostPosted: Thu Oct 23, 2008 4:37 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Что значит адрес ? Каталог из которого она запущена ?


Top
   
PostPosted: Fri Oct 24, 2008 3:47 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Да


Top
   
PostPosted: Fri Oct 24, 2008 6:52 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Code:
db 'MENUET01'
dd 1
dd start
dd i_end
dd mem
dd mem
dd 0
dd app_path   ;буфер для хранения полного пути приложения. 1024 байта


start:

; находим последний '/' и заменяем его 0. Получается полный путь к ;каталогу из которого запущена программа.

          pushd path

          push '/'
          push app_path
          call _strrchr    ;стандартная функция С ищет в строке последний указанный символ

          mov byte [eax], 0

;делаем этот каталог текущим рабочим
          mov eax, 30
          mov ebx, 1
          mov ecx, [esp+8]
          int 0x40

;теперь программа может открывать файлы в своей папке без указания полного пути


Всё это должны были делать файловые менеджеры, но они этого не делают. В результате все программы запущенные в Колибри получают своим рабочим каталогом /rd/1/


Top
   
PostPosted: Sat Oct 25, 2008 3:50 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Спасибо Serge, ты действительно разбираешься во многих вещах. А это ИМХО заслуживает звания хакера ОС Колибри. :wink:


Top
   
PostPosted: Mon Oct 27, 2008 4:13 pm 
Offline
Just Flooding

Joined: Sat Jan 06, 2007 2:30 pm
Posts: 269
to Asper
Serge не только разбирается во многих вещах, но и имеет время отвечать на вопросы. Мне бы времени...(


Top
   
PostPosted: Mon Oct 27, 2008 4:47 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
То же самое только на ассемблере
Code:
db 'MENUET01'
dd 1
dd start
dd i_end
dd mem
dd mem
dd 0
dd app_path   ;буфер для хранения полного пути приложения. 1024 байта


start:
        mov     edi,app_path
        mov     ecx,1024
        mov     esi,ecx
        xor     eax,eax
        cld
        repne   scasb
        test    ecx,ecx
        jz       exit

        sub     esi,ecx
        mov     ecx,esi
        std
        mov     al,'/'
        repne   scasb
        test    ecx,ecx
        jz      exit
        add     edi,2
        mov    [edi],0 ;ACSIIZ строка

; сейчас edi указывает на конец строчки типка /rd/1/File manager/
;                                                                                            ^ - тут edi
          mov eax, 30
          mov ebx, 1
          mov ecx, app_path
          int 0x40

....

app_path   rb 1024
i_end:


PS если нужно загрузить либу, то смотри код
svn\bin\programs\develop\box_lib\trunk\editbox_ex.asm
тут реализован код загрузки библиотеки из папки в которой загружена программа, а если невозможно загрузить, используется ini_file db '/sys/lib/box_lib.obj',0


Top
   
PostPosted: Tue Oct 28, 2008 5:12 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Nable
Я мог бы применить сказанные мной слова не только к Serge'у, а ко многим людям которые занимаются разработкой прикладного и системного софта для ОС Колибри, а также развитием собственно её. Ну а Serge'у и другим людям, которые своевременно отвечают на мои может быть иногда и дурацкие иногда вопросы я лично благодарен, т.к. их ответы помогают мне самому больше узнать Колибри и быстрее писать для неё программы не тратя время на самостоятельный поиск нужной информации.

LRZ
Respect, не прийдется самому заниматься переводом на ассемблер, а это как я уже написал Nable'у ускоряет мою работу.


Top
   
PostPosted: Tue Oct 28, 2008 5:43 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Отцами-основателями Колибри считаю Mario79, Mike.dld и Diamond'а, возвращению последнего на форум я искренне рад, хотелось бы верить и в возвращение Mario79. :)


Top
   
PostPosted: Tue Oct 28, 2008 10:57 pm 
Offline
User avatar

Joined: Thu Mar 29, 2007 3:02 am
Posts: 249
Mario79 играл очень сложную, неоднозначную, но важную роль... было бы очень здорово, если бы он вернулся...;)

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

*****:


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 17 posts ]  Go to page 1 2 Next

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