代码拉取完成,页面将自动刷新
中断(Interrupt) 是指 CPU 停下当前的工作任务,去处理其他事情,处理完后回来继续执 行刚才的任务
int $0x80 # 中断号
cli
sti
BIOS 提供一下中断,link
功能码 | 说明 |
---|---|
0x13 | 读取磁盘数据 |
0x14 | 异步通信: 串口输出字符 |
0x16 | 读取键盘输入 |
0x1a | 时钟中断 |
陷阱(Trap):是一种有意的,预先安排的异常事件
系统调用(System Call) 指操作系统提供给应用的一组 API 函数, Linux 系统调用见
查看 32 位操作系统系统调用号 NR_syscall 文件见
rg -n NR_write /usr/src/linux-headers-5.15.0-87-generic
/usr/src/linux-headers-5.15.0-87-generic/arch/x86/include/generated/uapi/asm/unistd_32.h:8:#define __NR_write 4 /usr/src/linux-headers-5.15.0-87-generic/arch/x86/include/generated/uapi/asm/unistd_32.h:150:#define __NR_writev 146 /usr/src/linux-headers-5.15.0-87-generic/arch/x86/include/generated/uapi/asm/unistd_64.h:5:#define __NR_write 1 /usr/src/linux-headers-5.15.0-87-generic/arch/x86/include/generated/uapi/asm/unistd_64.h:24:#define __NR_writev 20 /usr/src/linux-headers-5.15.0-87-generic/arch/x86/include/generated/uapi/asm/unistd_x32.h:5:#define __NR_write (__X32_SYSCALL_BIT + 1) /usr/src/linux-headers-5.15.0-87-generic/arch/x86/include/generated/uapi/asm/unistd_x32.h:321:#define __NR_writev (__X32_SYSCALL_BIT + 516)
通过 strace 查看系统调用过程
strace ./lab/05-interrupt/greet.out 2>&1 1>/dev/null
execve("./lab/05-interrupt/greet.out", ["./lab/05-interrupt/greet.out"], 0x7ffcb604f8b0 /* 56 vars */) = 0 [ Process PID=82486 runs in 32 bit mode. ] write(1, "Hello from ASM!\n", 16) = 16 exit(0) = ? +++ exited with 0 +++
objdump -d ./lab/05-interrupt/greet2.run | grep section
Disassembly of section .init: Disassembly of section .plt: Disassembly of section .plt.got: Disassembly of section .text: Disassembly of section .fini:
在 gas 汇编中对段的描述是 section, 例如
.section .text # 代码段, 可以简写 .text
.section .data # 数据段, 可以简写 .data
AT&T 寻址方式编写格式
section:disp(base, index, scale)
%es:msg # 寻址 es 段的 msg
操作系统在对地址空间访问是通过分段实现 (segment)
真实地址 = 段地址 << 4 + address ^ ^ | | 存储在段寄存器中 偏移
回顾 BIOS 启动流程
gdb -q -ex 'p/t 0x55aa'
hexdump -n 512 ./lab/06-barebone/fda.img
0000000 01b8 bb00 0002 03b9 ba00 0004 feeb 0000 0000010 0000 0000 0000 0000 0000 0000 0000 0000 * 00001f0 0000 0000 0000 0000 0000 0000 0000 aa55 0000200
扩展: nasm 汇编器 lab/07-nasm-boot/boot.s
(gdb) show disassembly-flavor att (gdb) set disassembly-flavor intel
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。