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

相关推荐
qeen8720 分钟前
【Linux】操作系统之进程介绍(一)
linux·笔记·学习·进程
邪修king23 分钟前
Re:Linux系统篇(二十五):文件系统(一):磁盘硬件底层原理:从物理结构到 CHS/LBA 寻址,搞懂硬盘数据的定位逻辑
java·linux·运维·gpt
小则又沐风a28 分钟前
TCP协议讲解-----了解TCP可靠性的基石
linux
刚入门的大一新生44 分钟前
Linux-简单设计libc库
linux·c++
科小墨1 小时前
【Linux 开发者系列 · 第 1 节】NPM 完全指南:它是什么、为什么重要、在 Linux 上怎么用
linux
IT北辰1 小时前
Linux运维:sed命令修改配置文件IP
linux
牢姐与蒯1 小时前
Linux文件(三).Ext系列文件系统
linux·运维·服务器
2401_869769592 小时前
linux基本指令2
linux
?re?ta?rd?ed?2 小时前
五层网络结构图概念理解
linux
码少女2 小时前
Linux--套接字编程
linux·服务器·网络