Y_Mur повторюсь извини/ это верная замена NtUserSendInput Код (Text): int NtUserSendInputServiceCall (Count,Input,Size) { __asm { MOV EAX,11F6 MOV EDX,7FFE0300 mov edx, esp sysenter retn } } ?????????????????????? естественно для фиксированного сервис пака
Да это верная замена (только MOV EDX,7FFE0300 перед mov edx, esp естественно лишняя), изменится ли номер сервиса (mov eax, 11F6) при смене версии win не знаю.
А нет торможу - этот "лишний" call смещает положение параметров SendInput в стеке (в sysenter же передаётся вершина стека) значит это нужно учесть. Порядок параметров естественно как SendInput.
Y_Mur и как будет прально? я не силен в асме? никак не догоню тот вариант не работат хоть и не падает esp-4?
например: mov eax, 11F6 push edx ; не важно что помещать в стек вместо того call mov edx, esp sysenter pop edx ; вместо ret после call ret можно конечно и sub esp, 4 вместо push и add esp, 4 вместо pop
Y_Mur 1>vkbd.cpp(2081): error C2400: inline assembler syntax error in 'opcode'; found 'newline' на sysenter(( может int 2eh? Забить sysenter опкодами чтоле?0F34 вроде
Y_Mur { Код (Text): _asm { mov eax, 11F6h push edx ; не важно что помещать в стек вместо того call mov edx, esp db 0х0fh db 0x34h pop edx ; вместо ret после call ret } 1>vkbd.cpp(2080): error C2400: inline assembler syntax error in 'opcode'; found 'constant' 1>vkbd.cpp(2081): error C2059: syntax error : 'bad suffix on number' 1>vkbd.cpp(2081): error C2400: inline assembler syntax error in 'opcode'; found 'constant' или через емит?
Y_Mur Код (Text): _asm { mov eax, 11F6h push edx ; не важно что помещать в стек вместо того call mov edx, esp _emit 0х0f _emit 0x34 pop edx ; вместо ret после call ret } 1>vkbd.cpp(2080): error C2400: inline assembler syntax error in 'first operand'; found 'newline' на первом емите в студии
_asm { mov eax, 11F6h push edx ; не важно что помещать в стек вместо того call mov edx, esp } _emit 0х0f _emit 0x34 _asm { pop edx ; вместо ret после call ret }
Rel 'невозможно' во вставках Y_Mur 1>vkbd.cpp(2081): error C2065: '_emit' : undeclared identifier Код (Text): #pragma region LINKER # pragma comment(lib, "ImageHlp") #ifndef _DEBUG # pragma comment(linker,"/SECTION:.txt,EWR") # pragma comment(linker, "/merge:.rdata=.txt") # pragma comment(linker, "/merge:.data=.txt") # pragma comment(linker, "/merge:.text=.txt") # pragma check_stack(off) # pragma optimize( "gsy", on ) //# pragma comment(linker, "/ENTRY:DllMain") //# pragma comment(linker, "/nodefaultlib") #endif // _DEBUG #pragma endregion это может быть праблемой?
Я собственно обычно асм без С юзаю, но щас проверил в студии компилится вот такое извращение Код (Text): #define sysenter __asm _emit 0x0f __asm _emit 0x34 __asm { mov eax, 11F6h push edx ; не важно что помещать в стек вместо того call mov edx, esp sysenter pop edx ; вместо ret после call ret };
Y_Mur [1504] In Unhandled Exception Filter [1504] ExCode=c0000005 (( но компилется вот полная функция Код (Text): int __stdcall NtUserSendInputServiceCall (UINT Count,LPINPUT Input,int Size) { #define sysenter __asm _emit 0x0f __asm _emit 0x34 #define NtUserSendInput 11F6h __asm { mov eax,NtUserSendInput push edx ; не важно что помещать в стек вместо того call mov edx, esp sysenter pop edx ; вместо ret после call ret }; } жду гуру. отладить просто невозможно. длл клеится в импорт к полноэкранной игре в виртуальной машине с диском в сто метров хрен что поставишь/