Page 60 of 77
Re: Помогите новичку
Posted: Fri Oct 25, 2013 10:11 pm
by e-andrew
Вопрос такой: как узнать номер слота текущего потока?
Судя по справке должен быть такой код
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
Re: Помогите новичку
Posted: Fri Oct 25, 2013 10:19 pm
by punk_joker
eAndrew, посмотри ф18.7
Re: Помогите новичку
Posted: Fri Oct 25, 2013 10:25 pm
by e-andrew
Я имею в виду не активного, а "этого"/this/self.
Хотя такой вариант тоже подойдет, так как это это окно изначально активно. Спасибо.
Re: Помогите новичку
Posted: Fri Oct 25, 2013 10:28 pm
by Mario_r4
eAndrew
Code: Select all
mcall 9,procinfo,-1
mov ecx,[ebx+30] ; PID
mcall 18,21
mov [active_process],eax ; WINDOW SLOT
З.Ы. Использование ф.18.7 для запрашиваемого случая ненадежно.
Re: Помогите новичку
Posted: Fri Oct 25, 2013 10:31 pm
by e-andrew
Mario_r4
Спасибо, то что нужно. Перечитал справку, понял ошибку.
Re: Помогите новичку
Posted: Mon Oct 28, 2013 7:15 pm
by z525
Я не могу понять как эта функция
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 но программа постоянно падает. Если у других работает то попытаюсь найти ошибку у себя. Или я просто не понимаю как она работает и как ей пользоваться
Re: Помогите новичку
Posted: Mon Oct 28, 2013 8:04 pm
by Serge
Никак.
Должно быть while(*strDest++ == *strSource++);
У Страуструпа шикарный разбор этой строчки.
Re: Помогите новичку
Posted: Mon Oct 28, 2013 8:42 pm
by SoUrcerer
libc для tcc? do not want! С tcc можно даже newlib использовать, тащемто. Зачем извращаться?
Re: Помогите новичку
Posted: Tue Oct 29, 2013 2:02 pm
by z525
Serge wrote:Никак.
Должно быть while(*strDest++ == *strSource++);
Никак второе - оператором сравнеия "==" копирование не получится. Всеравно спасибо за ответ.
SoUrcerer wrote:libc для tcc? do not want! С tcc можно даже newlib использовать, тащемто. Зачем извращаться?
Не понял ни про "do not want!" ни про "Зачем извращаться?" -я не в курсе каких-то дел и мне это к сожелнию ни очем не говорит.
p.s.
Две ошибки выявилось и вроде как никого не интересует (в смысле так и осталось).
Re: Помогите новичку
Posted: Tue Oct 29, 2013 2:12 pm
by SoUrcerer
В теме про tcc я выкладывал рабочий tcc и сказал, что его можно отлично использовать с menuetlibc. На деле можно и с newlib. Зачем использовать убогую недолибу?
Re: Помогите новичку
Posted: Fri Nov 01, 2013 11:07 pm
by 0CodErr
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 5537 times
svn4115, VirtualBox, Qemu
-
- уже скомпилированный бинарник
Downloaded 249 times
Re: Помогите новичку
Posted: Sat Nov 02, 2013 1:58 am
by Mario_r4
Ну, так не нужно их в один стек все пихать - у тебя часть потоков тупо умирает, к тому же стек потока у тебя вообще с нулевым адресом - куда он должен уменьшаться по твоему? В несуществующую область памяти? В общем обычный указатель стека затирает код, а указатель стека потоков сразу вызывает PageFault. А CPU сортирует по слоту, а не по PID. Слот же берется первый свободный от начала.
Re: Помогите новичку
Posted: Sat Nov 02, 2013 11:32 am
by 0CodErr
Mario_r4 wrote:стек потока у тебя вообще с нулевым адресом - куда он должен уменьшаться по твоему? В несуществующую область памяти?
В моём примере стек вообще не используется.
Mario_r4 wrote:указатель стека потоков сразу вызывает PageFault
И почему тогда это не произошло сразу же?
Re: Помогите новичку
Posted: Sat Nov 02, 2013 1:10 pm
by Mario_r4
0CodErr wrote:В моём примере стек вообще не используется.
O RLY?
0CodErr wrote:И почему тогда это не произошло сразу же?
Потому что так захотел Ктулху.
Re: Помогите новичку
Posted: Sat Nov 02, 2013 1:27 pm
by 0CodErr
Mario_r4 wrote:0CodErr писал(а):
В моём примере стек вообще не используется.
O RLY?
Покажи тогда, в каком месте это происходит.