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

相关推荐
Sarvartha18 小时前
三目运算符
linux·服务器·前端
vortex518 小时前
Kali Linux 安装与使用 Code-OSS / VSCodium :VSCode 轻量替代
linux·运维·编辑器
.柒宇.19 小时前
AI掘金头条项目部署实践指南
linux·运维·python·fastapi
zhangrelay20 小时前
Ubuntu 18.04 经典 / 有趣 / 实用 APT 软件清单
linux·笔记·学习·ubuntu
不做无法实现的梦~20 小时前
linux怎么使用正点原子无线dap烧录器
linux·运维·postgresql
coward9120 小时前
Linux 内核 KGDB 以及内核驱动单串口调试笔记:telnet + agent-proxy + gdb-multiarch 实践
linux·单片机·嵌入式硬件
vortex520 小时前
Kali Linux 磁盘扩容后内部分配完整教程
linux·运维
刻BITTER20 小时前
VirtualBox 安装Armbian x86 虚拟机
linux·嵌入式硬件
想唱rap20 小时前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
苏宸啊20 小时前
linux进程控制(一)
linux