Помогите новичку
-
Gluk, мне кажется, ты неправильно понимаешь концепцию динамически загружаемых библиотек. Она относится исключительно к организации кода - какой код в каком файле на диске должен находиться. После того, как библиотека загружена в память, нет разницы между тем, откуда исполняющийся код был загружен - из запускаемого бинарника или из библиотеки, подгруженной позднее. В частности, точно так же можно делать несколько потоков, падение одного из которых никак не влияет на остальные. Реентерабельность вообще никак не связана с динамической загрузкой - если один и тот же код должен обрабатывать несколько разных экземпляров объектов, то ему придётся либо быть реентерабельным, либо очень внимательно следить за используемыми глобальными переменными, независимо от того, в библиотеке он или в отдельной программе.Сделаем мир лучше!
ChE, libimg загружает файл и конвертирует его в подходящее - с точки зрения libimg - представление. Если на входе был 32-битный PNG, то внутренним представлением будет массив 32-битных цветов, а если PNG был с палитрой, то и внутреннее представление будет использовать палитру. По этой причине работать с внутренним представлением напрямую не рекомендуется; для вывода на экран в libimg есть специальная функция, есть также готовая функция для конвертации в 24bpp. Для конвертации в 32bpp с альфа-каналом готовой функции нет, но если это действительно нужно, правильнее будет добавить аналогичную функцию в libimg.
Сделаем мир лучше!
CleverMouse, большое спасибо за разъяснения! Я верно понимаю, что в таком случае нет разницы - использовать библиотеку или самописный бинарный файл (самостоятельно следя за выделением памяти)? Или использование библиотеки дает еще какие-то исключительные преимущества?
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Gluk
Код самописного бинарника не будет "расшариваться" для остальных потоков (потоков разных приложений), тогда как при использовании библиотеки загруженной через системную функцию код проецируется на приложения, до первой попытки приложения записать в эту область. Т.е. при наличии реентерабельной библиотеки она реентерабельна для всех потоков системы, а не только для потоков текущего приложения (которые работают в одном адресном пространстве)
Код самописного бинарника не будет "расшариваться" для остальных потоков (потоков разных приложений), тогда как при использовании библиотеки загруженной через системную функцию код проецируется на приложения, до первой попытки приложения записать в эту область. Т.е. при наличии реентерабельной библиотеки она реентерабельна для всех потоков системы, а не только для потоков текущего приложения (которые работают в одном адресном пространстве)
http://wiki.kolibrios.org/wiki/Ru/api/kernelGluk wrote:а где я могу посмотреть коды ошибок ФС? поиск в вики и на форуме результатов не дал
Поиск разве не работает? : (Хотя все же нужно выделить коды ошибок в отдельную статью)
Mario, а, понятно.
Sorcerer, да вроде работает, какие-то странички выдает, но того, что надо я среди них не видел
Sorcerer, да вроде работает, какие-то странички выдает, но того, что надо я среди них не видел
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Хм?
http://wiki.kolibrios.org/index.php?tit ... 0%BE%D0%BA
Кажется, в ближайшее время снова серьезно займусь wiki.
http://wiki.kolibrios.org/index.php?tit ... 0%BE%D0%BA
Кажется, в ближайшее время снова серьезно займусь wiki.
1. Как грамотно создать и использовать переменную в стеке?
Пусть, например, переменная занимает 16 байт (всё тот же tp_obj), и мы хотим передать указатель на неё первым параметром в функцию tp_obj tp_fnc(param1, param2);
После этого всё работает странно: то ли сбивается указатель стека, то ли что-то затирается, пока точно не выяснил. Но если вместо "push esp+24" передать адрес структуры tp_obj, зарезервированной с помощью rb, то всё работает.
2. Как наиболее эффективно положить в стек 16-байтовую структуру?
Мне приходят на ум такие варианты:
а)
б)
Для очень больших структур, наверно, оптимальный вариант movs, но для 16-байтовой накладные расходы на установку адресов слишком велики.
Что посоветуете?
Пусть, например, переменная занимает 16 байт (всё тот же tp_obj), и мы хотим передать указатель на неё первым параметром в функцию tp_obj tp_fnc(param1, param2);
Code: Select all
sub esp, 16
push param1 ;какие-то параметры
push param2
push esp+24; передаём указатель на нашу переменную
call tp_fnc
add esp, 24; очищаем стек, 4 байта удаляет сама функция
2. Как наиболее эффективно положить в стек 16-байтовую структуру?
Мне приходят на ум такие варианты:
а)
Code: Select all
mov eax, my_structure
push dword[eax+12]
push dword[eax+8]
push dword[eax+4]
push dword[eax]
Code: Select all
mov eax, my_structure+12
mov ecx, 4
label1: push dword[eax]
sub eax,4
loop label1
Что посоветуете?
Jaeger
ты передаешь в стеке адрес, на который указывал esp до того, как ты запихнул в стек свою структуру.
Правильно будет
По второму вопросу - всё правильно, хотя могут быть и другие варианты:
Code: Select all
push esp+24Правильно будет
Code: Select all
push esp+8Code: Select all
sub esp, 16
fld [eax]
fld [eax+8]
fstp [esp+8]
fstp [esp]Jaeger, в системе команд x86 не существует команды push esp+N. Fasm считает плюс разделителем и ассемблирует "push esp+N" так же, как "push esp N", то есть "push esp // push N", что явно не то, что нужно. Например, можно сделать так:
Code: Select all
sub esp, 16
mov eax, esp
push param1
push param2
push eax
call tp_fnc
add esp, 4*3 + 16
Сделаем мир лучше!
Jaeger
А не проще использовать стандартные способы?
Например:
А не проще использовать стандартные способы?
Например:
Code: Select all
;....
include 'proc32.inc'
;.....
mov eax, [pointer_to_my_variable]
stdcall tp_fnc, param1, param2, eax
;.....
proc tp_fnc stdcall, arg1:dword, arg2:dword, arg3:dword
;.....
ret
endp
65 функция работает с абсолютными координатами или координатами относительно окна?
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Function 65 - draw image with palette in the window.
* Coordinates of the image are coordinates of the upper left corner
of the image relative to the window.
Т.е. относительно окна.
* Coordinates of the image are coordinates of the upper left corner
of the image relative to the window.
Т.е. относительно окна.
спасибо...
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Вопрос к веб-разработчикам.
Помогите, пожалуйста, сделать переход javascript:toNext() и javascript:toPrevious() по нажатию влево/вправо на клаве соответственно. Хочу обновить послдний живой неофициальный сайт, посвящённый Колибри до вменяемого состояния.
Помогите, пожалуйста, сделать переход javascript:toNext() и javascript:toPrevious() по нажатию влево/вправо на клаве соответственно. Хочу обновить послдний живой неофициальный сайт, посвящённый Колибри до вменяемого состояния.
- Attachments
-
-
SlideShow.zip (49.05 KiB)Downloaded 263 times
-
Из хаоса в космос
Who is online
Users browsing this forum: No registered users and 0 guests