随笔分类 - 汇编
《汇编语言》(王爽)课后答案
摘要:因为战队新人的需要,再者因为自己当时学习的时候,对照答案都是东拼西凑,因此总结了自己学习笔记的答案,希望提供大家一些帮助。这里给出目录,大家可以直接上链接下载:https://wwa.lanzoui.com/i81ejsf TOC \o "1-5" \h \z \u 第二章 寄存器... PAGER
逆向与反汇编实战(一)--PEiD分析复现
摘要:准备 简介: PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名。 整个过程需要测试文件成品:https://www.lanzous.com/b07r7qu0d 首先使用PEiD检测之前做的一个异常捕捉测
第十章 结构和宏
摘要:10.1 结构 10.1.1 定义结构 name STRUCT field-declarations name ENDS Employee STRUCT IdNum BYTE "000000000" LastName BYTE 30 DUP(0) Years WORD 0 SalaryHistory
第九章 字符串和数组
摘要:9.2 基本字符串操作指令 32 位模式中,下表中的每条指令都隐含使用 ESI、EDI,或是同时使用这两个寄存器来寻址内存。 指令说明 MOVSB、MOVSW、MOVSD 传送字符串数据:将 ESI 寻址的内存数据复制到 EDI 寻址的内存位置 CMPSB、CMPSW、CMPSD 比较字符串:比较分
第五章--过程
摘要:5.3 本书附带的链接库 Irvine32.lib 过程说明 CloseFile 关闭之前已经打开的磁盘文件 Clrscr 清除控制台窗口,并将光标置于左上角 CreateOutputFile 为输出模式下的写操作创建一个新的磁盘文件 Crlf 在控制台窗口中写一个行结束的序列 Delay 程序执行
第八章 高级过程
摘要:8.2 堆栈框架 汇编中,函数传参分为寄存器参数和堆栈参数(值参数和引用参数) 8.2.1 堆栈参数 传递值 TITLE test ;假设等价函数调用为int sum = AddTwo(val1,val2); INCLUDE Irvine32.inc AddTwo PROTO,a:DWORD,b:D
第七章 整数算术指令
摘要:7.2 移位和循环移位指令 7.2.1 算术移位和逻辑移位 逻辑移位:以0填充移出位,最低的数据移动进入进位标志。 算术移位:以符号位填充。 7.2.2 SHL指令和SHR指令 逻辑左移,应用在快速乘法。 逻辑右移,应用在快速除法 7.2.4 SAL和SAR 算术左移和算术右移 应用:有符号数的除法
第六章 条件处理
摘要:6.1 布尔和比较指令 6.2.4 XOR指令 对 16 位整数来说,可以通过将其高字节和低字节进行异或运算来检测数的奇偶性: 将每个寄存器中的置 1 位(等于 1 的位)想象为一个 8 位集合中的成员。XOR 指令把两个集合交集中的成员清 0,并形成了其余位的并集。这个并集的奇偶性与整个 16 位
地址,指针和引用的表现形式
摘要:1 必要知识 地址:只有变量才有地址,常量没有地址,除了const定义的伪常量。 指针(TYPE *):任何数据类型都可以定义指针,指针本身也是一种数据类型。由于指针保存的都是地址(32位操作系统下,地址为32位),所以无论什么类型的指针都占据4字节空间。 引用(TYPE&):在C++中不能单独定义
第五章 过程
摘要:5.4 堆栈操作 5.4.2 POP和PUSH指令 PUSHFD 指令把 32 位 EFLAGS 寄存器内容压入堆栈,而 POPFD 指令则把栈顶单元内容弹出到 EFLAGS 寄存器: PUSHAD 指令按照 EAX、ECX、EDX、EBX、ESP(执行 PUSHAD 之前的值)、EBP、ESI 和
对VS2019进行32位汇编环境配置
摘要:1.库文件(很重要) 用我这一份就行:https://www.lanzous.com/i6364hg 2.VS依赖库 打开VS2019,选择桌面向导 配置项目时,选择新项目。 选择生成依赖项 选中masm 3.asm项目配置 新建一个C++的源文件,将后缀改为asm 选择上面的项目,再选择"项目名"
第四章 数据传送,寻址和算术运算
摘要:4.1 数据传送指令 4.1.2 操作数类型 操作数有 3 种基本类型: 立即数——用数字文本表达式 寄存器操作数——使用 CPU 内已命名的寄存器 内存操作数——引用内存位置 直接内存操作数:变量名引用的是数据段内的偏移量。 4.2 加法和减法 4.2.4 NEG指令 NEG:通过将数字转换为对应
第三章 汇编语言基础
摘要:3.2整数相加减 3.3 汇编链接执行周期 3.4 定义数据 数据定义语法: [name] directive initializer [,initializer]... 下面是数据定义语句的一个例子: count DWORD 12345 也可以用 3.4.10 为AddSub添加变量 3.4.12
《汇编语言》课程设计2
摘要:具体的在注释中都说明了。 jz指令:https://zhidao.baidu.com/question/564008138.html int 16的1号程序:https://zhidao.baidu.com/question/511189643.html 总结 汇编的难度并不大,我认为在有编程的基础
汇编学习--第十九天
摘要:17.4 应用int 13h中断例程对磁盘进行读写 3.5英寸软盘:2面,80磁道/面,18扇区/磁道,512字节/扇区,大小:1440KB≈1.44MB 面号,磁道号从0开始,扇区号从1开始。 将当前屏幕的内容保存在磁盘上 试验17 编写包含多个功能子程序的中断例程 测试程序 中断例程
汇编学习--第十八天
摘要:16.4 程序入口地址的直接定址表 实验 16编写包含多个功能子程序的中断例程。 在这道题中,因为table...最终会被范围为cs:N[si]这种形式存储,当我们转移程序到0:200h处时,CS和IP改变,但是程序中table处没有改变,所以会引发定址错误。 测试程序 中断例程 转自百度:http
汇编学习--第十七天
摘要:检测点15.1 (1) pushf call dword ptr ds:[0] (2) 设置int 9中断例程的地址的指令有两个部分: 在执行指令期间可能发生键盘中断,引发错误的地址执行,也就是IF寄存器可能为1,所以只要我们在执行这两段指令之间,令IF=0,即可保证程序正确。 15.5 安装新的i
汇编学习--第十六天
摘要:第十四章 端口 CPU可以直接读写数据的地方: 14.1 端口的读写 对8位端口进行读写,用al保存数据,对16位端口进行读写,用ax保存数据 对0~255以内端口进行读写时 对256~65535端口进行读写时,需要用dx保存端口号 14.2 CMOS RAM 70h地址端口:存放要访问的CMOS
汇编学习--第十五天
摘要:13.3 对int,iret和栈的深入理解 检测点13.1 (1)这道我认为主要是判断 这里是修改IP地址,即向前跳转距离,也即bx的范围。bx为十六位寄存器,范围在-32768~32767,即最大转移位移为32768 (2) 测试程序: 中断例程: 13.4 BIOS和DOS所提供的中断例程 通常
汇编学习--第十四天
摘要:第十二章 内中断 12.1 内中断的产生 发生情况: 使用中断类型码的数据来标识中断信息的来源。 8086CPU中的中断类型码: 12.2 中断处理程序 12.3 中断向量表 定义:就是中断处理程序入口地址的列表 中断向量表存放着256个中断源所对应的中断处理程序的入口,8086CPU从0000:0