Нужно вставить след асм код в масм32 VS 2019 x64. Код (ASM): mov eax, fs: [0x30] mov eax, [eax + 0xC] mov eax, [eax + 0xC] mov eax, [eax] mov eax, [eax] mov eax, [eax + 0x18] У меня выходит то invalid use of register или missing operator in expression асм забыл давно с первой строчкой mov eax, fs [30h] - помогло, но какого хрена с последней не помогает?
Ну ты в курсе, что 64-битный компиль студии не поддерживает асм-вставки? И для 64-битного приложения TEB получать надо через gs, если не путаю. Эту вставку можно заменить интринсикой __readfsdword или как то так.
Для 32-битного приложения? Зачем тебе ассемблер, если есть удобная интринсика: https://docs.microsoft.com/ru-ru/cp...dfsdword-readfsqword-readfsword?view=msvc-160
под 32 у меня заточен. Нужен под 64. То что скинул я должно работать под 64. Там именно такая схема, что получаем хендл кернел32, ищем LoadLibrary и GetProcAdress и все остальные функции вызываем по хешу. Мне нужно написать две проги под 64 и под 32. под 32 решил, а вот под 64 нужно так же получить хендл кернеля
Ну я тебе написал уже в первом сообщенит, что TEB надо получать через gs, а не fs, и само собой смещения будут другие.
Код (C): static HMODULE GetKernel32Base (void) { LPBYTE ptr; #ifdef _WIN64 ptr = (LPBYTE)__readgsqword(0x60); ptr = *(LPBYTE*)(ptr + 0x18); ptr = *(LPBYTE*)(ptr + 0x20); ptr = *(LPBYTE*)(ptr); ptr = *(LPBYTE*)(ptr); ptr = *(LPBYTE*)(ptr + 0x20); #else ptr = (LPBYTE)__readfsdword(0x30); ptr = *(LPBYTE*)(ptr + 0x0C); ptr = *(LPBYTE*)(ptr + 0x14); ptr = *(LPBYTE*)(ptr); ptr = *(LPBYTE*)(ptr); ptr = *(LPBYTE*)(ptr + 0x10); #endif return (HMODULE)ptr; }
как оно может работать под х64, если там 32 битный асм. Или что имеется ввиду? WOW64? И как ты делаешь, кстати, асм вставка или инклуд асм-файла в студии? тоже давно не писал, но как сказали выше, лучше пиши на Си или попробуй добавить dword ptr.
Я асм вставку делал чере инклуд для x64, а для x32 у меня асм вставкой А так, благодарность товарищу rmn, воркает