汇编
文章平均质量分 72
不会写代码的丝丽
这个作者很懒,什么都没留下…
展开
-
MASM 64汇编
微软宏编译器 MASM 有32位版本(ml)以及64版本(ml64)。原创 2022-09-11 13:52:52 · 2001 阅读 · 1 评论 -
X86-64 汇编学习1
指代因特尔32位处理器架构。X86-64:64位处理器架构:在64位下运行IA-32程序或者模式。原创 2022-09-04 23:36:06 · 796 阅读 · 0 评论 -
c++虚表学习2
在析构对象流程,首先释放子类的所有子类资源,在释放父类所有资源。因为子类资源被释放了,如果调用到父类时虚表没有还原父类的虚表,那么父类析构中有调用虚函数的可能会引起意外的异常。因为指向的函数是一个释放资源的子类函数。假设子类重写父类的虚函数,在父类构造函数调用虚函数只会调用自己的函数而不是子类的。首先我们要知道的是XH的虚表中第二项就是vSayPerson函数地址,第一项是析构函数代理函数地址。你会差异的发现父类构造也会填入自己虚表,完成父类构造的后,子类又会覆盖写入这个虚表地址。就是虚继承后的大小。...原创 2022-08-14 21:17:04 · 567 阅读 · 1 评论 -
IDA PRO中汇编结构体识别
从上图可知栈区临时定义的变量会在EBP之下,传入的参数会在EBP之上。EBP-xxx可以得到临时变量,而EBP+可以得到传入参数等。首先我们注意到个细节栈区有两个变量默认名称分别为var_3fc和ArgList刚好相差508个字节。而这个字节大小正好是我们定义。我们打开IDAPRO的结构体视图按下insert键插入一个新的自定义结构体。进行加减得到,所以这两个数都是本地变量,而不是函数调用传入的。我们首先把一些call调用的函数名称加上。在上面右键可以添加相对应字段。提示都是负数并且都是基于。...原创 2022-07-30 17:18:09 · 1370 阅读 · 0 评论 -
编译器求余优化
我们知道求余也是需要调用div汇编指令,但是div指令周期过长编译器往往会进行算式优化,进而避免调用div指令。原创 2022-07-17 18:45:43 · 531 阅读 · 0 评论 -
编译器除法优化
我们知道除法在现代CPU计算中耗费更多的时钟周期:如下图的Add和div做的对比Div延迟60-80之间 而add只有 1,可见我们在真实的情况应当避免调用除法汇编指令。解决办法:对于要进行除法运行的且除数是2的倍数,我们可以通过位移来完成如下图:但是对于负数来说位移是可能发生错误现象的如下:对于负数我们可以利用如下公式进行转化举个例子:a = -58b = 8我们本例中结合计算机特性符合如下公式(比如结果是-7.25我们应该向上取而不是向下):ceil ((a+b-1)/b) =ce原创 2022-07-12 21:57:45 · 1303 阅读 · 0 评论 -
处理器 增强指令集
在原始的指令集中并没有专门用于浮点数的运算,只能用去模拟浮点计算,效率极低。因此随着科技的发展推出了用于浮点计算(遵守)。是x具体指令参阅 Floating-Point Unit (FPU) instructions set为了支持浮点计算推出了 八个寄存器,存储格式为。但是他们访问存储是通过类似循环栈结构方式。本文将采用内联汇编的方式编写浮点指令我们看一个例子去理解循环栈结构: 用于加载一个数据到st(i)中,i数值取决于当前栈位置,当st存储完8个位置后会重新从st0覆盖存储一个浮点数到内存原创 2022-07-09 15:27:43 · 1395 阅读 · 0 评论 -
win32 调试器
概述什么调试器?就是可以调试原程序的每行代码,在Win32提供了相关API给我们进行进行操作1.CreateProcessA打开指定的程序,并传入对应的flag让其成为对应的调试器CreateProcessA 2.DebugActiveProcess调试特定的已经打开的程序DebugActiveProcess3.DebugActiveProcessStop终止调试DebugActiveProcessStop 张银奎的《软件调试》是非常不错的一本书推荐其大致原理如下:我们大致说一下Crea原创 2021-12-12 14:43:30 · 973 阅读 · 0 评论 -
OD插件编写
OD插件原创 2021-12-04 22:47:20 · 1807 阅读 · 0 评论 -
SEH 学习笔记
概述在WIN中提供了一个机制可以让我们在C语言中使用类似c++ try_catch语法,我们把这种语法称为Structured Exception Handling(SEH).官方文档例子1#include <iostream>#include <Windows.h>#include <Windows.h>#include <DbgHelp.h>int* pInt = nullptr;//异常处理器LONG ExceptionFilt原创 2021-11-28 00:46:41 · 584 阅读 · 0 评论 -
Win32 异常过滤器使用与异常上报分析等
Windows 调试符号(WinDbg、KD、CDB、NTSD)微软公共符号服务器原创 2021-11-20 22:10:03 · 980 阅读 · 0 评论 -
Win32 程序的API内联与Hook
概述我们有一个程序比较简单界面如下:我们点击中间的按钮会弹出一个MessageBox 如下图所示为方便学习这个原始程序我这里也用汇编编写.386.model flat, stdcall ;32 bit memory modeloption casemap :none ;case sensitiveinclude dlgApp.inc.data g_szTitle db "myTitle",0.codestart: invoke GetModuleHandle,NULL原创 2021-11-13 16:08:04 · 1166 阅读 · 0 评论 -
x86汇编实现一个注入器
解决Process32Next找不到的问题Process32NextW函数位于kernel32.inc 和kernel32.dll中,但是在Masm32 r11中却没有这Process32NextA版本,因此你需要自行修正修正方式:修改kernel32.inc声明源文件Process32FirstW PROTO STDCALL :DWORD,:DWORDProcess32NextW PROTO STDCALL :DWORD,:DWORD修改后Process32First PROTO S.原创 2021-11-07 16:17:12 · 1649 阅读 · 0 评论 -
汇编学习实战修改win32扫雷
概述概述下面的游戏我们都玩过这个扫雷的程序点击右上角的关闭按钮会直接退出整个程序。我们利用od实现如下效果:点击右上角弹出一个dialog,让用户确认是否是否关闭。思路概念win程序有消息机制,关闭的时候会触发WM_CLOSE消息.因此我们首先断点这个消息看看大致逻辑。OD窗口点击查看->窗口(无数据请右键刷新)选中对应的窗口选中消息断点。接着点击扫雷关闭按钮触发关闭消息这里利用断点分析后续流程我首先记录下结论:01001c23 如果是close消息会跳转到010原创 2021-10-30 19:43:12 · 649 阅读 · 1 评论 -
masm x86汇编 资源混合编译
和rc资源进行混编我们在日常编程的时候经常使用rc来写一些dialog快捷键等。本节展示如何在其混镖环境下使用这个rc资源.如果你使用ml来进行编译,并且使用高版本的visual studio来编辑rc文件,那么请安装XP支持组件这里直接使用vc6.0来进行我保存后得到两个文件resource.hresouce.rc我们将h文件转化为汇编的头文件//resource.h//{{NO_DEPENDENCIES}}// Microsoft Developer Studio genera原创 2021-10-30 14:34:37 · 493 阅读 · 1 评论 -
MASM 32位汇编 32与16汇编区别
前言首先下载工具包安装完成后配置如下3个环境变量lib :C:\masm32\libinclude:C:\masm32\includepath:C:\masm32\binC:\masm32是笔者的安装目录编译//编译 /coff表示编译成32 也就是PE结构ml /c /COFF xxx.asm//链接 /subsystem:windwoslink /subsystem:console xxx.asm基础语法MSDN相关文档.386 ;指定指令集.model flat,s原创 2021-10-24 17:05:12 · 2118 阅读 · 0 评论 -
masm 16位汇编 函数原理
本文讲述作者在学习16汇编下函数语法,以及加深了对c++对stdcall等语法本质的理解,以及函数调用带来损耗以及我们常说的线程上下文切换带来代价。本文需要读者有一定80486汇编基础基础知识.函数我们假设需要在汇编实现一个函数需要考虑如下:函数的跳转传参函数的返回地址函数的返回值上下文切换我们首先实现一个简单的交换寄存器变量的函数.data_seg segment ;定义一个双字,注意必须定义双字否则编译器可能视为段内跳转 g_szDst db "hello wo.原创 2021-10-17 19:01:10 · 777 阅读 · 0 评论 -
masm 16位汇编语法
表达式masm提供了很多表达式方便我们进行编程操作例如:code segmentSTART: mov ax,65+87 mov ax,65 and 78 mov ax,65 lt 66 mov ax, 65 mod 2code endsend START上面的的操作编译器会帮我们实现进行转化为合法的汇编语法要让编译器帮我计算出结果必须提供的表达式在编译阶段就能确定。算数运算:运算符意义例子+加65+32-原创 2021-10-17 18:07:45 · 1324 阅读 · 0 评论 -
8086 asm文件语法-2
无条件跳转jmp short 标号段内跳,仅能跳转单个字节长度范围(255)data_seg segment g_szSrc db "abcde$" g_szDst db 255 dup(0cch)data_seg endscode segmentSTART: assume ds:data_seg mov ax,data_seg ;放入ds到正确位置 mov ds,ax ;不加 short 也是可以的 jmp short LA原创 2021-10-17 11:47:39 · 278 阅读 · 0 评论 -
8086 asm文件语法-1
前置的一些编译链接命令code_seg segmentLABLE1: mov ax,bxLABLE2: mov cx,dxcode_seg endsend LABLE1我们在vs插件的dosbox会有内置编译器。执行汇编:ml /c xxx.asm执行链接: link xxxx.obj语法段定义段名字 segment 段定义开始segment ends 结束段定义code_seg segmentcode_seg ends重名段可以重复定义如下面的原创 2021-10-10 14:42:50 · 1368 阅读 · 0 评论 -
8080汇编指令
数据传送指令(1)mov a,bb的数据传送到a处,注意不能内存到内存中(会引起机器码过长,指令周期过长)关于周期一些术语(2)xchg a,bxchg是exchange, 也叫交换指令,效率高于mov 会使用暂存器。示例[1] xchg ax,bx[2] xchg ax,[100](3) xlat实际相当于执行下面汇编代码 mov al , ds:[bx+al]百度百科xlatxlat 是translate缩写(4) push reg将数值压入栈中(ss作为基地原创 2021-10-04 12:33:58 · 625 阅读 · 0 评论 -
8080寻址方式总结
寻址概念:寻址表示以何种方式找到一个数据所在的地1 立即寻址直接将常量赋值给寄存器如下命令:mov al,20 #注意8位寄存器mov ax,0xffff #注意16位寄存器2 寄存区寻址数据存放在寄存器中,需要在寄存器中取出mov cl,dlmov ax,bx注意点:段寄存器之间禁止相互赋值ip寄存器不能被赋值mov ds,csmov ip,ax3 直接寻址数据在内存中mov al,[1064h] # 从ds:1064处取出数据放入al注意点:如下代原创 2021-09-25 22:22:17 · 406 阅读 · 0 评论 -
MsDos下的Debug调试器与8080汇编小实验
环境安装使用vs code插件模拟dos下的环境:(1)安装如下插件(2) 新建一个xxx.asm文件你可以直接在这个界面打开doxbox,然后在内部使用debug(当然你也可以直接装一个doxbox而不是通过vscode).关于插件的更多说明可参阅:VSCode插件说明DEBUG参数说明调试程序DEBUG.EXE寄存器标志位小实验Debug调试工具中标志位说明对照表实验1 查看寄存器CF标志在msdox一个小实验,去查看标志寄存器的CF(全名carry flag)状态。CF用于原创 2021-09-22 22:25:00 · 685 阅读 · 2 评论