• 博客园Logo
  • 首页
  • 新闻
  • 博问
  • 专区
  • 闪存
  • 班级
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 简洁模式 ... 退出登录
    注册 登录

Yenyu Loong's Programming Blog

Love learning, love thinking, love coding.
  • 博客园
  • 联系
  • 订阅
  • 管理

2019年1月7日

C语言右移操作在汇编层面的相关解释

摘要: 在 CSDN 看到帖子回复如下: x=y>>2;004122A8 mov eax,dword ptr [y] 004122AB sar eax,2 '算术移位 004122AE mov dword ptr [x],eax x=((unsigned int)y)>>2;0041228D mov eax 阅读全文

posted @ 2019-01-07 14:12 yenyuloong 阅读(144) 评论(0) 推荐(0) 编辑

2018年9月13日

for 循环的反汇编浅析

摘要: for 循环 for 循环是使用频度最高的循环结构,我们通过 C 语言反汇编实例,来分析 for 循环结构在计算机底层的原理和构造。首先,我们编写一个简单的 for 循环: 为了方便观察,我们用十六进制来表示循环变量,编译后,我们用 OllyDBG 载入,我们可以看到对应的反汇编代码。 禁用优化的情景 这里的“push ecx”相当于“sub esp, 4”,为 i ... 阅读全文

posted @ 2018-09-13 23:48 yenyuloong 阅读(367) 评论(0) 推荐(0) 编辑

2018年9月12日

switch 语句的反汇编浅析

摘要: switch 的简单情景(case 不超过 3 项) 首先,我们分析一下 switch 语句的一种简单情景,我们可以用 C 写出如下如下代码。 编译后用 OllyDBG 载入,它将显示出如下的反汇编代码。 首先,我们可以看到 ESP 减少了 8,除了定义变量 a 外,编译器还分配了一个临时变量(这里暂且叫它 t)用于比较。t 被赋值成 a 的值,然后与立即数 0x10,... 阅读全文

posted @ 2018-09-12 12:05 yenyuloong 阅读(324) 评论(0) 推荐(0) 编辑

2018年9月11日

通过分析反汇编还原 C 语言 if…else 结构

摘要: 让我们从反汇编的角度去分析并还原 C 语言的 if … else 结构,首先我们不看源代码,我们用 OllyDBG 载入 PE 文件,定位到 main 函数领空,如下图所示。 在图示中,我已经做好了关键的注释,经过一步一步地分析,不难还原出以下的 C 语言代码段。 阅读全文

posted @ 2018-09-11 19:25 yenyuloong 阅读(690) 评论(0) 推荐(0) 编辑

__cdecl、__stdcall、__fastcall 与 __pascal 浅析

摘要: call 指令与 retn 指令 首先我们得了解 CALL 和 RETN 指令的作用,才能更好地理解调用规则,这也是先决条件。 实际上,CALL 指令就是先将下一条指令的 EIP 压栈,然后 JMP 跳转到对应的函数的首地址,当执行完函数体后,通过 RETN 指令从堆栈中弹出 EIP,程序就可以继续 阅读全文

posted @ 2018-09-11 11:40 yenyuloong 阅读(3726) 评论(4) 推荐(1) 编辑

2018年9月10日

ESP、EBP、CALL 指令与局部变量浅析

摘要: 概述 函数调用是计算机程序中一个最重要的概念之一,从汇编的角度看,能更加直观地理解函数调用的原理,理解 CALL 指令调用过程中 ESP、EBP 寄存器的作用。 我们先从一段简陋的 C 语言代码说起,我们首先调用了 printf 函数,为什么要调用 printf 函数呢?实际上是为了更方便地在 Ol 阅读全文

posted @ 2018-09-10 18:10 yenyuloong 阅读(701) 评论(1) 推荐(1) 编辑

2018年6月5日

GDI 映射模式(11)

摘要: 概述 调用 SetMapMode 函数可以设置映射模式:int SetMapMode( HDC hdc, // 设备环境句柄 int fnMapMode // 要设置的映射模式 ); 同样,调用 GetMapMode 函数可以获取映射模式:int GetMapMode( HDC hdc // 设备环境句柄 ); 注: 默认情况下,映射模式... 阅读全文

posted @ 2018-06-05 09:13 yenyuloong 阅读(224) 评论(0) 推荐(0) 编辑

2018年6月2日

GDI 画刷(10)

摘要: 创建画刷调用 CreateSoildBrush、CreateHatchBrush、CreateBrushIndirect 函数可以创建画刷。CreateSoildBrush:创建实心画刷;CreateHatchBrush:创建阴影画刷;CreateBrushIndirect:根据 LOGBRUSH 结构的内容创建画刷;Windows 使用被选入设备环境的画笔来描绘边线,使用被选入设备环境的画刷来填... 阅读全文

posted @ 2018-06-02 16:02 yenyuloong 阅读(486) 评论(0) 推荐(0) 编辑

2018年6月1日

GDI 画笔(9)

摘要: 使用现有画笔Windows 提供三种备用画笔(Stock Pen):BLACK_PEN(黑色画笔)、WHITE_PEN(白色画笔)、NULL_PEN(不绘制任何图形的画笔)。调用 GetStockObject 函数可以获取备用画笔的句柄(HPEN),调用 SelectObject 函数可以将指定的画笔选入设备环境,并返回之前选入设备环境的画笔句柄:// 定义画笔句柄HPEN hPen, hPrev... 阅读全文

posted @ 2018-06-01 16:42 yenyuloong 阅读(452) 评论(0) 推荐(0) 编辑

GDI 边框绘制函数(8)

摘要: 绘制矩形 调用 Rectangle 函数可以绘制一个矩形(它将填充这个矩形): 绘制椭圆 调用 Ellipse 函数可以绘制一个椭圆,它和绘制矩形的参数相同: 绘制圆角矩形 调用 RoundRect 函数可以绘制一个圆角矩形,它的边框与前面两个相同,并且还需要两个参数: 绘制弧线、弓形、扇形 分别调 阅读全文

posted @ 2018-06-01 15:32 yenyuloong 阅读(736) 评论(0) 推荐(0) 编辑

下一页
 
Powered by:
博客园
Copyright © 2022 yenyuloong
Powered by .NET 6 on Kubernetes
Github主页 | 邮件联系