#include <stdio.h>
#include <stdint.h>
#if defined(_MSC_VER)
#include <intrin.h>
static void get_cpuid(void* p, int i) {
__cpuid((int*)p, i);
}
static void get_cpuidex(void* p, int i, int c) {
__cpuidex((int*)p, i, c);
}
#elif defined(__GNUC__)
#include <cpuid.h>
static void get_cpuid(void* p, int i) {
int* a = (int*) p;
__cpuid(i, a[0], a[1], a[2], a[3]);
}
static void get_cpuidex(void* p, int i, int c) {
int* a = (int*) p;
__cpuid_count(i, c, a[0], a[1], a[2], a[3]);
}
#endif
struct CpuInfo {
uint32_t eax, ebx, ecx, edx; // Do not change member order.
CpuInfo(int infoType) {
get_cpuid(&eax, infoType);
}
CpuInfo(int infoType, uint32_t ecxValue) {
get_cpuidex(&eax, infoType, ecxValue);
}
};
int main() {
char vendor[12+1] = { 0 };
{
CpuInfo f0(0);
* (uint32_t*) &vendor[4*0] = f0.ebx;
* (uint32_t*) &vendor[4*1] = f0.edx;
* (uint32_t*) &vendor[4*2] = f0.ecx;
}
vendor[sizeof(vendor)-1] = 0;
char brand[16*3+1] = { 0 };
for(int i = 0; i < 3; ++i) {
CpuInfo e(i + 0x80000002);
* (uint32_t*) &brand[16*i + 4*0] = e.eax;
* (uint32_t*) &brand[16*i + 4*1] = e.ebx;
* (uint32_t*) &brand[16*i + 4*2] = e.ecx;
* (uint32_t*) &brand[16*i + 4*3] = e.edx;
};
brand[sizeof(brand)-1] = 0;
printf("Vendor : [%s]\n", vendor);
printf("Brand String : [%s]\n", brand);
CpuInfo f1(1);
printf("CMOV : %d\n", (f1.edx >> 15) & 1);
printf("FMA : %d\n", (f1.ecx >> 12) & 1);
printf("AVX : %d\n", (f1.ecx >> 28) & 1);
printf("RDRAND : %d\n", (f1.ecx >> 30) & 1);
}
Самое простое. Записываешь получаемое значение в переменную и сравниваешь со своим.Как это все заюзать? p.s хочу сделать привязку к cpuid
C++:#include <stdio.h> #include <stdint.h> #if defined(_MSC_VER) #include <intrin.h> static void get_cpuid(void* p, int i) { __cpuid((int*)p, i); } static void get_cpuidex(void* p, int i, int c) { __cpuidex((int*)p, i, c); } #elif defined(__GNUC__) #include <cpuid.h> static void get_cpuid(void* p, int i) { int* a = (int*) p; __cpuid(i, a[0], a[1], a[2], a[3]); } static void get_cpuidex(void* p, int i, int c) { int* a = (int*) p; __cpuid_count(i, c, a[0], a[1], a[2], a[3]); } #endif struct CpuInfo { uint32_t eax, ebx, ecx, edx; // Do not change member order. CpuInfo(int infoType) { get_cpuid(&eax, infoType); } CpuInfo(int infoType, uint32_t ecxValue) { get_cpuidex(&eax, infoType, ecxValue); } }; int main() { char vendor[12+1] = { 0 }; { CpuInfo f0(0); * (uint32_t*) &vendor[4*0] = f0.ebx; * (uint32_t*) &vendor[4*1] = f0.edx; * (uint32_t*) &vendor[4*2] = f0.ecx; } vendor[sizeof(vendor)-1] = 0; char brand[16*3+1] = { 0 }; for(int i = 0; i < 3; ++i) { CpuInfo e(i + 0x80000002); * (uint32_t*) &brand[16*i + 4*0] = e.eax; * (uint32_t*) &brand[16*i + 4*1] = e.ebx; * (uint32_t*) &brand[16*i + 4*2] = e.ecx; * (uint32_t*) &brand[16*i + 4*3] = e.edx; }; brand[sizeof(brand)-1] = 0; printf("Vendor : [%s]\n", vendor); printf("Brand String : [%s]\n", brand); CpuInfo f1(1); printf("CMOV : %d\n", (f1.edx >> 15) & 1); printf("FMA : %d\n", (f1.ecx >> 12) & 1); printf("AVX : %d\n", (f1.ecx >> 28) & 1); printf("RDRAND : %d\n", (f1.ecx >> 30) & 1); }
Создаёшь хеш-функцию, с помощью которой получаешь нужный хеш и потом его сравниваешь.Как сделать проверку на хеш сумму?
вот так типа?Самое простое. Записываешь получаемое значение в переменную и сравниваешь со своим.
Можно ещё значения накрыть чем нибудь. XOR там HEX какой нибудь
// Получаем информацию, связанную с каждым расширенным идентификатором.
for (int i = 0x80000000; i <= nExIds; ++ i)
{
__cpuid (CPUInfo, i);
// Интерпретируем
if (i == 0x80000002)
memcpy (CPUBrandString, CPUInfo, sizeof (CPUInfo));
else if (i == 0x80000003)
memcpy (CPUBrandString + 16, CPUInfo, sizeof (CPUInfo));
else if (i == 0x80000004)
memcpy (CPUBrandString + 32, CPUInfo, sizeof (CPUInfo));
}
}
нет .вот так типа?
C++:// Получаем информацию, связанную с каждым расширенным идентификатором. for (int i = 0x80000000; i <= nExIds; ++ i) { __cpuid (CPUInfo, i); // Интерпретируем if (i == 0x80000002) memcpy (CPUBrandString, CPUInfo, sizeof (CPUInfo)); else if (i == 0x80000003) memcpy (CPUBrandString + 16, CPUInfo, sizeof (CPUInfo)); else if (i == 0x80000004) memcpy (CPUBrandString + 32, CPUInfo, sizeof (CPUInfo)); } }
GetModuleInformationКак узнать сколько памяти потребляет плагин?
SF->getSAMP()->getChat()->chatEntryКак считывать сообщения с чата?
А как через raknet hook ?)SF->getSAMP()->getChat()->chatEntry
Или raknet хук
Хук цепляет только что пришедшие сообщения и не ловит клиентские(сообщения скриптов и т.д.).А как через raknet hook ?)
И что быстрее будет?
И как правильно использовать?
SF->getSAMP()->getChat()->chatEntry("Test", Test);