Applications development, KoOS API questions
Posts 386 Joined: Sat Oct 05, 2013 9:32 pm
Fri Oct 25, 2013 10:11 pm
Вопрос такой: как узнать номер слота текущего потока?
Судя по справке должен быть такой код
Code: Select all
mcall 9, win.procinfo, -1
mov eax, [win.procinfo + 4]
and eax, 0x0000FFFF
mov [win.sid], eax
dph [win.sid]
но данный код выводит совсем не номер слота, а постоянно разные числа (можно использовать как random функцию). В чем у меня ошибка?
Из спарвки:
Code: Select all
* +4: word: позиция окна потока в оконном стэке
* +6: word: (не имеет отношения к запрошенному потоку)
номер слота потока, окно которого находится в оконном стэке
в позиции ecx
Posts 1279 Joined: Tue Apr 12, 2011 11:19 pm
Fri Oct 25, 2013 10:19 pm
Posts 386 Joined: Sat Oct 05, 2013 9:32 pm
Fri Oct 25, 2013 10:25 pm
Я имею в виду не активного, а "этого"/this /self .
Хотя такой вариант тоже подойдет, так как это это окно изначально активно. Спасибо.
Posts 2328 Joined: Sun Feb 10, 2013 12:37 pm
Fri Oct 25, 2013 10:28 pm
eAndrew
Code: Select all
mcall 9,procinfo,-1
mov ecx,[ebx+30] ; PID
mcall 18,21
mov [active_process],eax ; WINDOW SLOT
З.Ы. Использование ф.18.7 для запрашиваемого случая ненадежно.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Posts 386 Joined: Sat Oct 05, 2013 9:32 pm
Fri Oct 25, 2013 10:31 pm
Mario_r4
Спасибо, то что нужно. Перечитал справку, понял ошибку.
Posts 51 Joined: Sun Oct 02, 2011 4:48 pm
Я не могу понять как эта функция
Code: Select all
char* strcpy(char* strDest,char* strSource)
{
char* res;
res=strDest;
while(*strDest++ == strSource++) ;
return res;
}
которая лежит здесь
http://websvn.kolibrios.org/filedetails ... 2Fstrcpy.c
может работать (в смысле правильно копировать) ?
Пробовал её использовать на Dev-C++ 4.9.9.2 но программа постоянно падает. Если у других работает то попытаюсь найти ошибку у себя. Или я просто не понимаю как она работает и как ей пользоваться
Posts 3952 Joined: Wed Mar 08, 2006 6:25 pm
Никак.
Должно быть while(*strDest++ == * strSource++);
У Страуструпа шикарный разбор этой строчки.
Posts 2810 Joined: Mon Sep 24, 2007 11:11 am
libc для tcc? do not want! С tcc можно даже newlib использовать, тащемто. Зачем извращаться?
Posts 51 Joined: Sun Oct 02, 2011 4:48 pm
Serge wrote: Никак.
Должно быть while(*strDest++ == * strSource++);
Никак второе - оператором сравнеия "==" копирование не получится. Всеравно спасибо за ответ.
SoUrcerer wrote: libc для tcc? do not want! С tcc можно даже newlib использовать, тащемто. Зачем извращаться?
Не понял ни про "do not want!" ни про "Зачем извращаться?" -я не в курсе каких-то дел и мне это к сожелнию ни очем не говорит.
p.s.
Две ошибки выявилось и вроде как никого не интересует (в смысле так и осталось).
Posts 2810 Joined: Mon Sep 24, 2007 11:11 am
В теме про tcc я выкладывал рабочий tcc и сказал, что его можно отлично использовать с menuetlibc. На деле можно и с newlib. Зачем использовать убогую недолибу?
Posts 1498 Joined: Sun Oct 30, 2011 6:43 pm
Fri Nov 01, 2013 11:07 pm
http://websvn.kolibrios.org/filedetails ... t#line-414
Назначаемые новым потокам идентификаторы монотонно растут.
Ну и мне стало интересно.
Этот код:
Spoiler: Code: Select all
ORG 0
BITS 32
; --------------------------- ;
MENUET01 db 'MENUET01'
version dd 1
program.start dd START
program.end dd END
program.memory dd END
program.stack dd END
program.params dd 0
program.path dd 0
; --------------------------- ;
START:
; thread.create
mov eax, 51
mov ebx, 1
mov ecx, THREAD
xor edx, edx
int 64
jmp START
THREAD:
or eax, -1
int 64
; --------------------------- ;
END:
И в некоторый момент
Spoiler:
1.PNG (40.16 KiB)
Viewed 5522 times
svn4115 , VirtualBox, Qemu
уже скомпилированный бинарник Downloaded 248 times
Posts 2328 Joined: Sun Feb 10, 2013 12:37 pm
Ну, так не нужно их в один стек все пихать - у тебя часть потоков тупо умирает, к тому же стек потока у тебя вообще с нулевым адресом - куда он должен уменьшаться по твоему? В несуществующую область памяти? В общем обычный указатель стека затирает код, а указатель стека потоков сразу вызывает PageFault. А CPU сортирует по слоту, а не по PID. Слот же берется первый свободный от начала.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Posts 1498 Joined: Sun Oct 30, 2011 6:43 pm
Sat Nov 02, 2013 11:32 am
Mario_r4 wrote: стек потока у тебя вообще с нулевым адресом - куда он должен уменьшаться по твоему? В несуществующую область памяти?
В моём примере стек вообще не используется.
Mario_r4 wrote: указатель стека потоков сразу вызывает PageFault
И почему тогда это не произошло сразу же?
Posts 2328 Joined: Sun Feb 10, 2013 12:37 pm
0CodErr wrote: В моём примере стек вообще не используется.
O RLY?
0CodErr wrote: И почему тогда это не произошло сразу же?
Потому что так захотел Ктулху.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Posts 1498 Joined: Sun Oct 30, 2011 6:43 pm
Mario_r4 wrote: 0CodErr писал(а):
В моём примере стек вообще не используется.
O RLY?
Покажи тогда, в каком месте это происходит.
Users browsing this forum: No registered users and 12 guests