Page 1 of 2
Есть вопрос
Posted: Tue Oct 07, 2008 12:01 pm
by Asper
Как получить физический адрес в программе зная адрес виртуальный?
Пример из Висопсиса (только здесь обратный подход):
Code: Select all
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);
[/color]
Re: Есть вопрос
Posted: Tue Oct 07, 2008 4:39 pm
by Serge
Никак. Функция есть, но доступна только из ядра
Re: Есть вопрос
Posted: Wed Oct 08, 2008 3:19 pm
by Asper
Драйвер эту функцию вызвать сможет?
Re: Есть вопрос
Posted: Wed Oct 08, 2008 4:41 pm
by Serge
Да. GetPgAddr
Re: Есть вопрос
Posted: Wed Oct 08, 2008 4:48 pm
by Asper
Большое спасибо Serge. Это как раз то, что мне было нужно. 
Re: Есть вопрос
Posted: Thu Oct 23, 2008 3:03 pm
by Asper
Ещё вопрос : программа может узнать каким-либо образом свой адрес в файловой системе?
Re: Есть вопрос
Posted: Thu Oct 23, 2008 4:37 pm
by Serge
Что значит адрес ? Каталог из которого она запущена ?
Re: Есть вопрос
Posted: Fri Oct 24, 2008 3:47 pm
by Asper
Да
Re: Есть вопрос
Posted: Fri Oct 24, 2008 6:52 pm
by Serge
Code: Select all
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/
Re: Есть вопрос
Posted: Sat Oct 25, 2008 3:50 pm
by Asper
Спасибо Serge, ты действительно разбираешься во многих вещах. А это ИМХО заслуживает звания хакера ОС Колибри.

Re: Есть вопрос
Posted: Mon Oct 27, 2008 4:13 pm
by Nable
to Asper
Serge не только разбирается во многих вещах, но и имеет время отвечать на вопросы. Мне бы времени...(
Re: Есть вопрос
Posted: Mon Oct 27, 2008 4:47 pm
by <Lrz>
То же самое только на ассемблере
Code: Select all
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
Re: Есть вопрос
Posted: Tue Oct 28, 2008 5:12 pm
by Asper
Nable
Я мог бы применить сказанные мной слова не только к Serge'у, а ко многим людям которые занимаются разработкой прикладного и системного софта для ОС Колибри, а также развитием собственно её. Ну а Serge'у и другим людям, которые своевременно отвечают на мои может быть иногда и дурацкие иногда вопросы я лично благодарен, т.к. их ответы помогают мне самому больше узнать Колибри и быстрее писать для неё программы не тратя время на самостоятельный поиск нужной информации.
LRZ
Respect, не прийдется самому заниматься переводом на ассемблер, а это как я уже написал Nable'у ускоряет мою работу.
Re: Есть вопрос
Posted: Tue Oct 28, 2008 5:43 pm
by Asper
Отцами-основателями Колибри считаю Mario79, Mike.dld и Diamond'а, возвращению последнего на форум я искренне рад, хотелось бы верить и в возвращение Mario79. 
Re: Есть вопрос
Posted: Tue Oct 28, 2008 10:57 pm
by ДедОк
Mario79 играл очень сложную, неоднозначную, но важную роль... было бы очень здорово, если бы он вернулся...
