5 байт самомодификации
- From
- Crusader Mike (2:450/159.24)
- To
- Gennady Mayko
- Date
- 2002-10-23T10:56:20Z
- Area
- SU.WINDOWS.NT.PROG
Hi, Gennady!
[skip]
Пардон, что вмешиваюсь, но да будет спорящим известно, что на подавляющем
большинстве текущих систем можно атомарно изменить 8 байт (при условии что они
выровнены по 8-байтной границе) -- см. инcтрукцию CMPXCHG8B или:
__forceinline
void
AdvInterlockedExchange8b(
IN OUT LARGE_INTEGER volatile * Destination,
IN LARGE_INTEGER Exchange,
OUT LARGE_INTEGER* Res)
{
__asm
{
mov esi, Destination
mov ebx, Exchange.LowPart
mov ecx, Exchange.HighPart
mov eax, [esi]
mov edx, [esi + 4]
repeat_label:
lock cmpxchg8b qword ptr [esi]
jne repeat_label
mov esi, Res
mov [esi], eax
mov [esi+4], edx
}
}
все копирайты мои. :) Что-то мне подсказывает, что те байты, которые вы хотите
заменить, удовлетворяют условию выравнивания. ;)
Sincerely yours, Prihodko Michael.
---
* Origin: Crusader was there! o=|======> (2:450/159.24)