2026-05-11
全局变量、局部变量
内存图:
当然以上的是否可读写都是对于正向开发来讲的,逆向可以随意操作
全局变量:
只要是见到用立即数直接寻址的多半都是全局变量
局部变量:
局部变量不仅可以通过 ebp-? 来找,也可以通过栈顶加什么 esp+? 来找,所以看到这个形式不要惊慌,因为编译器的不同/不同的版本,寻找的方式可能会不同
函数参数的分析
分析一个程序,你肯...
阅读全文
2026-05-06
课后作业
做的是有基础的那部分
有一个字符串是这样的:china中国verygood天朝nice,里面既含有中文又含有英文,请编写一个函数,能截取任意长度的字符串 n(n<=总长度)
123fn(5) = chinafn(6) = china中fn(8) = china中国v
此题涉及到字符存储所占字节大小的问题,英文字符占一字节,课上讲的中文字符...
阅读全文
2026-04-23
C语言是怎么变成汇编的
引言:定义一个函数,什么都不写什么都不做的时候,编译器和链接器就已经自动生成了一个框架
如果不想要它自动生成的这个,就可以使用裸函数
什么是裸函数
12void __declspec(naked) Function(){...}
裸函数调用时与普通函数无异,都是生成一个 call 指令,也就是会先把下一条指令...
阅读全文
2026-04-14
图省事安了个 xp 虚拟机,这样就可以使用跟课堂一样的古老环境了
VC6 相关操作
F7:编译并运行
F5:调试
shift+F5:结束调试
F9:设置断点
F10:step over
F11:step in
打开寄存器窗口和内存窗口:view–debug windows
registers:寄存器窗口(快捷键ALT+5)
Memory:内存窗口(快捷键...
阅读全文
2026-04-14
函数
计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它可以实现固定运算功能的同时还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理,所谓出口,就是指函数的计算结果,也称为返回值,在计算机求得之后,由此口带回给它的调用程序。
汇编中的函数:
函数的入口:
函数的...
阅读全文
2026-04-14
课后作业
画出第二个函数的堆栈图
堆栈图:
画出第三个函数的堆栈图
堆栈图:
画出第四个函数的堆栈图
堆栈图:
阅读全文
2026-04-14
JMP
只修改 EIP,其余什么也不做
1MOV EIP, 寄存器/立即数 ;简写为:JMP 寄存器/立即数
CALL
修改 EIP,ESP 也会 -4,把下一句要执行的地址压栈
12PUSH 地址BMOV EIP, 地址A/寄存器 ;简写为:CALL 地址A/寄存器
RETN
修改 EIP,ESP + 4,弹出栈顶返回地址赋给 EIP。类...
阅读全文
2026-04-14
标志寄存器
在哪看?OD 已经把 32 位拆分好列出来了,C就是表示CF,P就表示PF…最下面那个 EFL 就是拆开前的样子,需要自己拆的时候就把这个 16 进制数展开成 32 位二进制就行
记住这几个寄存器的位置和名称:
进位标志 CF(Carry Flag):如果运算结果的最高位产生了一个进位或借位,那么,其值为 1,否则 0
研究进位时,要先...
阅读全文
2026-04-14
内存地址
反汇编窗口和寄存器窗口数据存储都是从高位到低位,数据区则是由低位到高位
寻址公式一:[立即数]
读取内存的值:
12MOV EAX, DWORD PTR DS:[0x13FFC4]MOV EAX, DWORD PTR DS:[0x13FFC8]
向内存中写入数据:
12MOV DWORD PTR DS:[0x13FFC4], eaxMOV...
阅读全文
2026-04-14
通用寄存器
32 位通用寄存器的指定用途如下:
寄存器
主要用途
编号
存储数据的范围
EAX
累加器
0
0 - 0xFFFFFFFF
ECX
计数
1
0 - 0xFFFFFFFF
EDX
I/O指针
2
0 - 0xFFFFFFFF
EBX
DS段的数据指针
3
0 - 0xFFFFFFFF
ESP
堆栈指针
4
0 - ...
阅读全文
上一页 1 2 3 下一页