汇编语言脚本:cpuid

简介: 最近在拜读Richard Blum的汇编语言程序设计,记录下学习中的脚本,以及遇到的问题和处理过程

版本1:

#cpuid.s Sample program to extract the processor Vendor ID
  .section .data
output:
  .ascii "The processor Vendor ID is 'xxxxxxxxxxxxxxxxx'\n"
  .section .text
  .global _start
_start:
  mov $0,%eax
  cpuid
  mov $output,%edi
  mov %ebx,28(%edi)
  mov %edx,32(%edi)
  mov %ecx,36(%edi)
  mov $4,%eax
  mov $1,%ebx
  mov $output,%ecx
  mov $42,%edx
  int $0x80
  mov $1,%eax
  mov $0,%ebx
  int $0x80

使用as编译,ld连接:

as -o cpuid.o cpuid.s
ld -o cpuid cpuid.o
./cpuid

图片.png

使用GCC进行汇编,需要修改脚本:将start换成main

#cpuid.s Sample program to extract the processor Vendor ID
  .section .data
output:
  .ascii "The processor Vendor ID is 'xxxxxxxxxxxxxxxxx'\n"
  .section .text
  .global main
main:
  mov $0,%eax
  cpuid
  mov $output,%edi
  mov %ebx,28(%edi)
  mov %edx,32(%edi)
  mov %ecx,36(%edi)
  mov $4,%eax
  mov $1,%ebx
  mov $output,%ecx
  mov $42,%edx
  int $0x80
  mov $1,%eax
  mov $0,%ebx
  int $0x80

使用gcc汇编:

gcc -o cpuid cpuid2.s

但是会报错,错误信息如下:relocation R_X86_64_32 against `.data' can not be used when making a PIE object; recompile with -fPIE


解决方法是:增加-no-pie选项

gcc -o cpuid cpuid2.s -no-pie

图片.png

连接C库函数

#cpuid.s View the CPUID Vendor ID string using C library calls
.section .data
output:
  .asciz "The processor Vendor ID is '%s'\n"
.section .bss
  .lcomm buffer,12
.section .text
.global _start
_start:
  mov $0,%eax
  cpuid
  mov $buffer,%edi
  mov %ebx,(%edi)
  mov %edx,4(%edi)
  mov %ecx,8(%edi)
  push $buffer
  push $output
  call printf
  add $8,%esp
  push $0
  call exit

编译:

as -o cpuid3.o cpuid3.s

连接:

ld -dynamic-linker /lib/ld-linux.so.2 -o cpuid3 -lc cpuid3.o

执行报错,现阶段还不是太熟悉汇编语言,留待后续再解决

图片.png

目录
相关文章
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
Winform中实现无边框窗体只需要设置FormBorderStyle = FormBorderStyle.None,但是无边框下我们需要保留移动窗体、拖拽调整大小、自定义美观好看的标题栏等...
4443 0
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
性能优化:Node.js高效服务器开发技巧与最佳实践
【10月更文挑战第29天】在Node.js服务器开发中,性能优化至关重要。本文介绍了几种高效开发的最佳实践,包括使用缓存策略、采用异步编程、实施负载均衡和性能监控。通过示例代码展示了如何实现这些技术,帮助开发者构建更快、更稳定的Node.js应用。
255 2
"SQLTask携手Tunnel:打造高效海量数据导出解决方案,轻松应对大数据挑战
【8月更文挑战第22天】SQLTask搭配Tunnel实现高效海量数据导出。SQLTask擅长执行复杂查询,但直接导出受限(约1万条)。Tunnel专注数据传输,无大小限制。二者结合,先用SQLTask获取数据,再通过Tunnel高效导出至目标位置(如CSV、OSS等),适用于大数据场景,需配置节点及连接,示例代码展示全过程,满足企业级数据处理需求。
150 2
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
424 3
快速上手|HTTP 接口功能自动化测试
VT技术(二)检测CPU支持
1.CPUID指令检测 在进入VMX Opreation之前必须要检测CPU是否支持VMX技术,可以通过CPUID指令进行查询,在执行CPUID指令之后,返回值存入EAX,EBX,ECX,EDX中,查看ECX.VMX[5]位是否为1,否则不支持VMX技术,关于CPUID指令的介绍可以参考Intel白皮书卷二第三章第三节 Instruction-CPUID Identification详细介绍了CPUID的参数
635 0
【MATLAB】GWO灰狼算法优化的VMD信号分解算法
【MATLAB】GWO灰狼算法优化的VMD信号分解算法
1249 0
【MATLAB】GWO灰狼算法优化的VMD信号分解算法
不使用VMTools,宿主机与虚拟机交换文件的方法(接上章)(上)
VMTool虽然方便,但毕竟是专用于虚拟机的软件,将要封装的系统不安装VMTools,易导致一些琐碎问题。下面我给大家介绍一个最常用的宿主机与虚拟机交换文件的方法,当然,比VMTools繁琐,但绝不影响系统封装。
652 0
不使用VMTools,宿主机与虚拟机交换文件的方法(接上章)(上)
Python(四十二)百度智能云OCR文字识别的坑
这篇的内容其实跟python的关系不是很大,是在使用python做文字识别的时候遇到的一个坑,这里大概记录一下,希望大家在使用百度智能云的OCR文字识别的时候,能够快速的解决这个问题。 业务需求大概是这个样子的,学生在使用仪器做完实验之后,仪器会将实验结果,打印在一张小票上。正常,学生需要将小票上边的数据,逐一输入到系统中,但是,客户觉得这个操作太麻烦了,想用文字识别将小票上边的数据识别出来,自动填入,学生只需要检查一遍识别的是否正确即可。 需求很简单,我这里的后端是使用PHP做的,这也不耽误我使用python做文字识别。最开始的python文字识别的尝试,我这里就不做赘述了,具体,请
231 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问