汇编
文章平均质量分 57
向你扔鸡爪
Go!Go!Go!
展开
-
反汇编—switch
标号1的位置要计算出:减去(debug) / 加上(release)第一个case要等于0,因为第一个case在跳转表数组的0下标位置。可以看到原本应该是case12和case14的位置显示的是def,故case12和case14缺项,代码如下。通过1和2,可以知道它们应该是连续case,还要判断是否缺项,进入跳转表看。x64和x86分析类似。原创 2024-09-24 10:14:48 · 239 阅读 · 0 评论 -
Visual Studio-X64汇编编写
2.属性->生成依赖项->masm。1.平台工具集要选VS2015。3.链接器->高级->入口点。原创 2024-09-19 20:58:35 · 803 阅读 · 0 评论 -
29912分页
最高位63位:硬件DEP位,1不可执行,0可执行。原创 2024-09-18 20:23:16 · 298 阅读 · 0 评论 -
101012分页属性
PS (大小页位):1大页(4M),0小页(4k)后面还有PTE。G(页属性位):1全局页TLB不随进程变化刷新,0即刻刷新。U/S(权限位):1(User),0(System)(PWT、PCD、PAT)的组合和TLB(缓存)有关。A(物理页访问位):1已被访问(读/写),0没有。D(页访问位):1已被访问(读/写),0没有。R/W(读写位):1可读可写,0可读。P(有效位):1有效,0无效。Avail(可用性位):忽略。原创 2024-09-17 21:12:29 · 215 阅读 · 0 评论 -
101012分页
【代码】分页 101012。原创 2024-09-17 13:25:05 · 209 阅读 · 0 评论 -
中断门+陷阱门
2.假设构造的中断回调函数的地址是:0x00401000h,P = 1、DPL = 3、cs = 0x8。可以看到 中断门 压入了5个参数,iretd会返回这5个参数。3.开始构造 INT 0x20。1.在IDT表找未使用的位置。陷阱门和中断门几乎一模一样。IF=0 时:程序不再接收。中断描述符在IDT表里面。如果查看INT 3中断。原创 2024-09-15 22:21:05 · 365 阅读 · 0 评论 -
跨段+调用门
调用门其实就是用户态和内核态之间的一扇门,确保用户态程序能够安全地访问内核态。调用门通过设置适当的权限和验证机制,保证用户态程序无法随意进入内核态。其本质就是对同一内存区域进行不同的描述和限制(比如base和limit的变化,特权、type变化等)。原创 2024-09-15 10:10:15 · 379 阅读 · 0 评论 -
拆解CS、DS、SS、FS
解析 cs、ds、ss、fs段描述符:以DS段为例1.先找一个没用的位置2.测试代码如下因为我们以ds为例,取原先的ds 0023h,拆出来,index=4,通过上图0x0023h的段描述符是:00cff300`0000ffff,我们需要把它复制到index为9的位置上去(空位),通过组合现测试ds = 004bh,原创 2024-09-13 14:28:43 · 343 阅读 · 0 评论 -
X86-段寄存器,段选择子,段描述符,GDTR.GDT 关系图
4,294,967,296 / 1024 / 1024 / 1024 = 4GB(最大寻址空间)32位 有32根地址线, 即2^32 = 4,294,967,296字节。原创 2024-09-12 13:08:04 · 186 阅读 · 0 评论 -
汇编调用C库函数—printf、scanf和Win32API
2.C库函数是cdecl约定,就算你前面写了".model flat,stdcall",也必须手动平栈。1.C库函数的调用,必须声明,不然编译报错。原创 2024-09-10 16:18:22 · 452 阅读 · 0 评论