2025-1-9-NASM学习一
一月 09, 2025
Nasm 1Day
全部代码
1 | extern _printf,_system ;声明外部的 printf 函数 |
代码执行:
- 打印 Hello,World! qwq,This is my first nasm code ... 等
- 执行了两个cmd命令 设置编码和创建了名为1的文件夹
代码分段分析
主要分为三个部分
声明部分
1 | extern _printf,_system ;声明外部的 printf 函数 |
定义部分
1 | section .data |
执行部分
1 | _main: |
关键字
extern
作用:
- 用于声明外部符号
- 告诉汇编器某个符号在当前之外的文件定义
section
- 用于指定代码或数据的段,告诉汇编器代码应该放在特定的段中
- 常见的段有
.text
(代码段).data
(数据段).bss
(未初始化数据段)
push
- 该指令将一个值压入栈中
- 会将操作数(寄存器、立即数、内存中的数据)压入栈并更新栈指针
- 常用于保存寄存器的值
call
- 用于调用函数
- call 将返回地址压入栈中,然后跳转到目标地址
- 也就是将函数调用后继续执行的地方放到函数的入口点
add
- 将两个操作数相加 并将结果存储到第一个操作数中
- 支持将寄存器 立即数 以及内存地址作为操作数
ret
- 用于从函数返回
- 执行ret时 会从栈中弹出返回地址 将控制权传递给该地址处的代码(通常是函数调用的下一条指令)
知识点
PE文件节
想了解什么是PE文件的 节 ,先要搞懂什么是PE文件
PE (Portable Executable) 译作:便携式可执行文件
用于
- 可执行程序
- 动态链接库
- 系统驱动程序
等文件格式
PE文件是Windows平台上执行程序的标准格式
基于COFF(Common Object File Format)格式
包含了不同的结构和信息来帮助操作系统 加载、执行、调试程序
节 是PE文件内部的重要概念
指的是 文件中存储程序代码、数据、资源的区域
每个节都有特定的功能和属性 可以满足不同部分代码和数据的存储需求
PE文件结构简述
DOS头:
- 标记PE文件开始部分
- 包含魔数 MZ
- 包含指向PE头部的指针
PE头:
- PE文件的结构核心
- 包含文件格式关键信息
- 机器平台
- 目标平台
- 节表位置
节表:
记录文件中各个节
- 位置
- 大小
- 属性
- 节:
- 实际存储程序
- 代码
- 数据
- 资源
- 的区域
节的功能与属性
代码节
.text
:包含程序的机器代码,通常 只读 且 可执行数据节
.data
: 包含已初始化的全局变量和静态变量,通常 可读写未初始化数据节
.bss
:包含未初始化的全局变量和静态变量,不占磁盘空间,加载时会被初始化为0只读数据节
.rdata1
:存放数据的只读数据,如字符串常量,这部分数据通常是共享的,不允许修改导入/导出节
.idata
和.edata
:用于动态链接 导入节存储程序所需的外部函数和符号,导出节用于存储程序希望其他程序调用的函数和符号(感觉像头文件)
查看评论