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

相关推荐
IMPYLH2 小时前
Linux 的 csplit 命令
linux·运维·服务器·数据库
钰衡大师2 小时前
Nohup 使用技术文档
linux·服务器·运维开发·unix
Sakuyu434682 小时前
zabbix源码安装
linux·运维·zabbix
赖亦无2 小时前
【水动力学】06 Linux + Conda 环境下源码编译安装 pypims (CUDA加速) 避坑指南
linux·运维·conda·pypims·水动力学
穷人小水滴2 小时前
使用 WebRTC 实现局域网投屏: PC (GNOME ArchLinux) -> 平板 (Android)
android·linux·webrtc·浏览器·js·gnome·投屏
恋红尘2 小时前
K8S 控制器-资源调度-叩丁狼
linux·docker·kubernetes
weixin_537590452 小时前
《C程序设计语言》练习答案(练习1-7)
linux·c语言·算法
123过去4 小时前
ike-scan使用教程
linux·测试工具
疯狂吧小飞牛10 小时前
GPG基础指令
linux·服务器·网络