c++32/64位编译器简单获取cpuid低32位代码
来源:互联网 发布:网络软文推广公司 编辑:程序博客网 时间:2024/04/30 04:01
64位使用的是shellcode进行内联汇编代码,32位的编译器直接使用内联汇编就行了。
UINT64 GetCpuID(){#if defined(_WIN64)//64位编译器 UCHAR shellcode[] = "\xB8\x01\x00\x00\x00" //mov eax 1 "\x0F\xA2" //cpuid "\xC3"; //ret PVOID p = NULL; //有dep保护机制 所以不能用malloc申请的堆内存中运行执行代码否则会触发异常 if (nullptr==(p = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE))) fprintf(stderr,"VirtualAlloc Failed!!!"); if (nullptr==(memcpy(p, shellcode, sizeof(shellcode)))) fprintf(stderr, "WriteMemory Failed!!!"); typedef UINT64(*SCFN)(void); SCFN code = (SCFN)p; //利用函数跳转的特性运行shellcode,shellcode 结尾必须有 ret指令 否则会会运行混乱崩溃。 UINT64 ret=code(); VirtualFree(p, sizeof(shellcode), MEM_RELEASE | MEM_COMMIT); return ret;#else volatile UINT hcpu = 0U; __asm { mov eax,1 cpuid mov hcpu,eax } return hcpu;#endif}
阅读全文
0 0
- c++32/64位编译器简单获取cpuid低32位代码
- 32位编译器与64位编译器
- 64位程序获取CPUID,不使用汇编指令
- C获取系统是32位还是64位
- C/C++32位和64位编译器下,各数据类型和指针变量分配内存大小
- MFC~32位转换成64位编译器~ON_WM_TIMER()~ 错误~
- [C/C++]_[初级]_[获取Windows系统的位数32位或64位]
- 32位 64位
- powershell:脚本中检查mingw-w64编译器是否能生成 32/64位代码
- 32位低功耗MCU的设计
- 32位低功耗MCU的设计
- 通过C代码判断系统是32位还是64位
- 在Windows下测试CPU是32位还是64位的C代码
- 32位系统与64位系统 C/C++通用代码
- C程序将32位代码向64位平台移植的注意事项
- 32位平台和64位平台C代码的一个小差异
- 如何区分32/64位系统(C代码)?
- VC 获取计算机是32位还是64位的
- 欢迎使用CSDN-markdown编辑器
- HashMap和Hashtable的区别
- Android 开源App:发呆便签/SuperNote
- C++读取写入.txt文件(ifstream/ofstream)—读取指定行,修改指定行,复制文件,清除文件,统计文件行数
- Tencent2017秋招笔试题--求编码的index
- c++32/64位编译器简单获取cpuid低32位代码
- cron定时器_爬虫_获取每日星座运势
- Apache Tephra -使用
- 类的成员变量通过Field.set方法提示java.lang.NullPointerException
- IP转数字,数字转IP
- Meteor Shower POJ
- RobotFrameWork之For循环应用
- Mac下TensorFlow的部署和安装
- 简单明了理解交叉验证