Linux内核学习-汇编笔记

rax 返回值

eax

rcx

循环次数

this指针

rsi source

rdi destination

__fastcall传参,快速调用传参

xor eax, eax

mov eax, 0x0a

add eax, 1

mov ebp-8, eax //写回内存

xor eax, eax

xor ebx, ebx

mov eax, 10

mov ebx, 1

add eax, ebx

nasm\masm 结果存在左边

att 结果存在右边

编译优化

玩转汇编执行流

统一内存语义协议栈

伪指令:org、section、bits

特殊符号:$

org 定义一个锚点

ORG 0x7c00

SECTON .text

BITS 16

global _start //C语言和汇编互调

times 510-(-$) db 0

db 0x55,0xaa

$$ 所在段的起始位置

代码段 .text

数据段

赋值的全局数据区 .data

未赋值的全局数据区 .bss

CPU的两种运行模式:实模式、保护模式

汇编的注释是:

主板在运行os时,默认从MBR读数据,执行权交给MBR区域的代码

bios中断:0x10输出

boot loader ->setup ->装在os内核 ->实模式 ->保护模式

实模式下的内存布局

7C00~7DFF,512B,MBR被BIOS加载到此处

7E00~9FBFF,608KB,可用区域

1~3FF,1KB,中断向量表

bochs 调试汇编,默认停在bios程序入口位置。

Linux源码-启动流程

操作系统真相还原

cmake是一个命令工具,可用来生成makefile。但也要根据CMakeLists.txt中的内容生成,CMakeLists.txt就是写给cmake的规则。

Makefile是一个文件,make执行时,去读取Makefile文件中的规则。

函数调用前后,栈是不变的

esp 栈顶

ebp 栈底

堆栈执行流:

char code\[\] = {

0x55,

0x**,

0x5d,

0xc3}

//创建一块可读可写可执行的内存区域

temp = mmap()

memcpy(temp, code,sizeof(code))

p_fun fun = temp

return fun()

栈 递减 由大地址向小地址递减

esp指向栈顶

mov esp, REAL_MODE_STACK_BASE

栈帧重叠

eip 指令寄存器

jmp

jmp SETUP_ADDR_BASE 段内跳 短跳

jmp CODE_SELECTOR:KERNEL_ADDR 跨段跳 长跳

jcc

call

把call指令的下一条指令地址压入栈

再跳转

ret

void test(){

int a = 10;

if (10==a){

a=100;

}

a=1000;

}

// 第一个局部变量放在ebp-8的位置,

tmain:

call test

test:

push ebp

mov ebp, esp

mov ebp-8,10

mov eax, ebp-8

cmp eax, 10

jne .s1

mov ebp-8,100

.sl:

mov ebp -8, 1000

leave

ret

相关推荐
载数而行5205 分钟前
Linux 4常用指令(文件/时间/搜索查找/压缩解压指令)
linux
不做无法实现的梦~41 分钟前
MAVLink 协议教程
linux·stm32·嵌入式硬件·算法
实心儿儿1 小时前
Linux —— 线程控制(2)
linux·运维·服务器
烛衔溟1 小时前
TypeScript 模块与声明文件全解
linux·ubuntu·typescript
量子炒饭大师1 小时前
【Linux系统编程:进程概念】——【从 冯诺依曼系统体系结构 到 操作系统】
linux·运维·服务器·操作系统·冯诺依曼
2023自学中2 小时前
imx6ull 开发板,手机,MQTT 物联网通信实验。
linux·服务器·物联网·嵌入式·开发板·应用编程
f8979070702 小时前
把文件进行锁死,不要有写的权限。不被恶意攻击
linux
用户2367829801682 小时前
Linux kill 命令:从信号机制到进程管理的深度解析
linux
00后程序媛2 小时前
ubuntu安装qemu和xv6
linux·运维·ubuntu
载数而行5202 小时前
Linux操作系统 5 组管理,权限管理
linux