Size: a a a

Ассемблер

2021 May 21

DF

Dollar Føølish in Ассемблер
да, нету его
источник

A

Aleksandr in Ассемблер
сделай мьютексом и не городи костыли. есть же прямое и простое решение
источник

C

Cofeefee in Ассемблер
Так я пока до мьютекса дохожу все падает. Перед вызовом мьютекса регистры сохраняю (invoke CreateMutex портит регистры), и вот на этих push rcx, rdx и падаю
источник

AA

Anonimus Anonim in Ассемблер
Описание системных вызывов ассемблера из которых строится программа ?
источник

C

Cofeefee in Ассемблер
А можно темплейт какой-то? Т.е прка мьютекс не отсемафорен - возвращать ошибку в вызвавший тред?
источник

D

Den in Ассемблер
а если перед push сделать резервирование стека типа sub rsp чтоли на размер этих регистров
источник

D

Den in Ассемблер
тут кто то говорил, что так делается
источник

С

Сергей in Ассемблер
Другой поток тоже в это время сделает вычитание
источник

A

Aleksandr in Ассемблер
у другого потока другой стек
источник

A

Aleksandr in Ассемблер
start()
{
   ghMutex = CreateMutex(0, 0, 0);  
   if(ghMutex == 0)
   {
       fail();
   }

   worker();
   worker();
   worker();

   CloseHandle(ghMutex);

   exit();
}

worker()
{
   dwWaitResult = WaitForSingleObject( ghMutex, 0xFFFFFFFF);
   if(dwWaitResult != 0)
   {
       fail();
       return;
   }
 
  //your code

   ReleaseMutex(ghMutex)
}
источник

D

Den in Ассемблер
так откуда вызовы то прилетают с других потоков в один стэк? Или с одного потока?
источник

D

Den in Ассемблер
ну да это логично, наверняка должно быть решение  этой проблемы, что то читал, что lock или hold типа такого комманды в асме есть при записи в память из них потом вроде как lock в си сделан
источник

C

Cofeefee in Ассемблер
Собственный перехватчик mfc-шной dll, в части CInternetSession:GetHTTPConnection, вызывается из одной dll-ки, которая дергается из нескольких потоков. Т.е выглядит так

Thread1: call MainDll, call CInternetSession:GetHTTPConnection

Thread2: call MainDll, call CInternetSession:GetHTTPConnection

На GetHTTPConnection висит собственный хук, который решает пускать далее в mfc-шный GetHTTPConnection или внутри себя обрабатывать
источник

C

Cofeefee in Ассемблер
Соответственно, собственный хук на GetHTTPConnection - нереентерабельный
источник

D

Den in Ассемблер
Вот нашел вроде что то полезное:
lock or byte [rsp], 0 instead of mfence when you need a barrier separate from a store
источник

D

Den in Ассемблер
т.е. можно залочить rsp на текущей позиции я так понял
источник

D

Den in Ассемблер
и есть еще барьерные какие то команды типа mfence sfence lfence
источник

D

Den in Ассемблер
И еще надо подумать наверное в сторону отключения записи в кэш
источник

A

Aleksandr in Ассемблер
нет
источник

A

Aleksandr in Ассемблер
а что тебе мешает запушить в стек регистры для мьютекса?
источник