一、实验原理
x64dbg 是一款开源且免费的 Ring 3 级动态调试器,采用 QT 编写,支持 32 / 64 位程序。其反汇编引擎 BeaEngine 和 Capstone 功能极其强大,也有丰富的插件和脚本功能,且并保持更新,目前已经基本替代了 OllDbg。
软件解压后根目录存在x96dbg, 双击 x96dbg,出现三个弹窗,会生成 x96dbg.ini 文件,里面记录着 32 位和 64位 dbg 程序的路径。当需要把整个程序文件夹移动到其他路径时,最好把这个 ini 删除,重新双击让它再生成。当需要把它加到发送到菜单中的时候,也推荐添加 x96dbg,它会自动选择用 x32 还是 x64dbg 打开。
二、X64dbg使用示例
1.熟悉x64dbg界面, 以及调试的快捷键(F7步进,F8步过)
2.加载32位测试程序,观察寄存器、内存、标志寄存器中的标志位等
3.通过操作通用寄存器EAX/EBX/ECX/EDX和MOV指令,观察OF/SF/CF/ZF的变化
4.通过操作PUSH和POP指令,观察堆栈上数据的变化
5.X86体系结构的数据存储方式(小端、大端字节序)
6.指令片段
附指令片段:
MOV EAX, 20101234 (x64dbg输入时,十六进制请加前缀0X) MOV EBX, 70101234 ADD EAX, EBX (观察标志位SF变化) |
SF是符号标志符,结果为负,S=1,结果为正,S=0.
SF变化:0,0,1
附指令片段:
MOV EAX, 90101234 (x64dbg输入时,十六进制请加前缀0X) MOV EBX, 80101234 ADD EAX, EBX (观察标志位OF变化) |
OF是溢出标志符,一个寄存器如果存放的值超过所能表示的范围,就是溢出,结果溢出,O=1,反之,O=0.
OF变化:0,0,1
附指令片段:
MOV EAX, E0101234 (x64dbg输入时,十六进制请加前缀0X) MOV EBX, 60101234 ADD EAX, EBX (观察标志位CF变化) |
CF是进位标志符,无符号位运算的结果超过存储器存放的最大值,C=1,没有超过,C=0
CF变化:0,0,1
附指令片段:
MOV EAX, E0000001 (x64dbg输入时,十六进制请加前缀0X) MOV EBX, 1FFFFFFF ADD EAX, EBX (观察标志位ZF变化) |
ZF是0标志符,运算结果为0,Z=1,结果不是0,Z=0
ZF变化:0,0,1
通过操作PUSH和POP指令,观察堆栈上数据的变化
附指令片段:
MOV EAX, 1234 (x64dbg输入时,十六进制请加前缀0X) MOV EBX, 5678 PUSH EAX PUSH EBX POP ECX (ECX的值以及内存的存储情况,体会栈的操作) |
三、总结
1.X64dbg的调试快捷键F8含义
调试快捷键F8是步进,其含义的逐语句,就是每次执行一行语句。如果碰到函数调用,就会进入到函数里。
2.ESP的值是如何随着PUSH/POP而发生变化的
ESP:栈指针寄存器,其内存放这一个指针,改指针永远指向系统栈最上面一个栈帧的栈顶。
PUSH压栈,ESP值变小;POP出栈,ESP值变大;
3.数据的大端和小端存储方式
大端存储方式:低地址存放高字节数
小端存储方式:低地址存放低字节数
标签:渗透,MOV,EAX,指令,PUSH,x64dbg,EBX,调试器 From: https://blog.csdn.net/qq_67812668/article/details/141097081