汇编语言脚本: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

目录
相关文章
|
7月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
257 2
|
7月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
806 0
|
5月前
|
存储 算法 安全
深入理解汇编语言:基础语法和常用指令介绍
深入理解汇编语言:基础语法和常用指令介绍
|
7月前
|
程序员 存储 安全
【汇编】汇编语言的介绍
【汇编】汇编语言的介绍
135 0
【汇编】汇编语言的介绍
计算机的解释器介绍以及使用
计算机的解释器介绍以及使用
99 1
汇编语言基础命令
汇编语言基础命令
80 0
|
存储 安全 程序员
5.1 汇编语言:汇编语言概述
汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。相较于高级语言(如C、Python等),汇编语言学习和使用难度相对较大,需要对计算机内部结构、指令集等有深入的了解,以及具有良好的编程习惯和调试能力。但对于需要对计算机底层进行操作的任务,汇编语言是极其高效的,因为其可以实现对计算机底层资源的精细控制,极大地提高了计算机运行效率。
134 0
|
存储 JavaScript
x86汇编基础指令
x86汇编基础指令
x86汇编基础指令
|
编译器 C语言 数据安全/隐私保护
汇编语言和本地代码及通过编译器输出汇编语言的源代码
汇编语言和本地代码及通过编译器输出汇编语言的源代码
111 0
|
架构师 Unix 编译器
[oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言
[oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言
203 0
[oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言