自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(269)
  • 资源 (1)
  • 收藏
  • 关注

原创 Qt导出C++类和Qt静态方式加载DLL

本文主要介绍如何使用QCreator新建包含Qt库的C++导出类(DLL)和如何在Qt工程中调用DLL中的C++类。整个实验的步骤如下:一、宿主工程(调用者)1,打开QCreator,新建一个名为“Host”的Qt GUI工程(除名字外,全部默认)。2,构建并运行Host工程,产生“MainWindow”窗口。3,确认测试正常,关闭窗口,并关闭Host工程。二、

2016-12-13 16:25:31 7130 5

原创 License系统设计(二)

本文主要讲解License Generator的实现,总体设计请参考前一篇文章。一、导出导入库    License Generator是采用QT实现的,它需要导入前面的加解密DLL。导入库的设计如下:#ifndef AES_DLL_H#define AES_DLL_H#ifdef AES_IMPORT#define AES_API extern "C" __declspec(

2016-12-07 10:36:13 3125

原创 License系统设计(一)

本系列文章主要介绍我近期设计的一个软件License系统。一、软件需求    假设M公司要发布一款软硬件一体的产品,名为“OfficeDevice”。这个OfficeDevice的上层是一个PC,下层带一些嵌入式设备,而PC上运行一个叫“Office Kits”的软件,这个软件包含三个功能模块:Word、PPT和Excel。    现在要设计一个License系统,需满足以下两点需求:

2016-12-07 10:08:49 10039 1

原创 探索Crypto++(一)下载、编译和部署

Crypto++是一个开源的C++加密算法库,它包括密码、消息认证码,单向散列函数,公钥密码机制,关键协议方案,缩小压缩等加密算法。本文将介绍Crypto++库从下载到项目应用的基本步骤。(本人目前的项目需要的是AES文件加密算法,其他的留待以后探索)一、下载1,登陆官网:https://www.cryptopp.com/2,点击“Download”,将显示如下的下载列表

2016-11-30 16:31:50 6586

转载 Error:LINK2005和MTd与MDd

最近,在我的程序中调用一个外部库编译时,报大量的链接错误:Error:LINK2005,google了一下,找了一篇很好的解释“LINK2005”编号错误的博客,分享如下:    http://www.cnblogs.com/MuyouSome/p/3332699.html造成LNK2005错误主要有以下几种情况:  1.重复定义全局变量。可能存在两种情况:   A

2016-11-30 10:53:11 1396

原创 加密算法资源帖

近期,针对公司的软件产品,需要设计一套License系统,保证它不被非授权用户使用。而License系统的关键点之一就是对License文件进行加密,于是,我需要先研究一下加密算法。按照一般步骤,先google一下,找到了如下有效资源,分享如下:1,SSL常见加密算法    http://www.willrey.com/support/ssl_des.html    这是一个理论帖,介

2016-11-29 09:18:52 780

原创 《汇编语言》学习(十八)

本文主要介绍《汇编语言》一书中的两个课程设计题。课程设计1位于第10章,要求在DOS下用彩色显示一张数据表格。课程设计2位于第17章,要求制作一个系统启动盘。    对于课程设计1,我已经在第10章做过了,参考我的博文链接:     http://blog.csdn.net/sagittarius_warrior/article/details/52931471    对于课程设计2,

2016-11-28 14:56:59 561

原创 《汇编语言》学习(十七)键盘输入和磁盘读写

《汇编语言》第17章主要介绍BIOS提供的几个中断例程,包括:键盘输入处理中断例程int 9,键盘缓冲区读取例程int 16,磁盘读写中断例程int 13。但是,本章的重点却不是这些中断例程,而是最后的“课程设计 2”,这些BIOS中断例程是为了做好课程设计而准备的。一、键盘输入和缓冲区读取例程1,int 9    int 9是BIOS提供的处理键盘输入的中断例程,CPU在9号中断发生

2016-11-23 16:57:23 6093

原创 《汇编语言》学习(十六)直接定址表

本文主要介绍直接定址表。一、地址标号和数据标号1,地址标号    前面各章节中,在代码段中,经常会用到各种标号,有些表示指令的起始地址,有些表示数据的起始地址。这种只在代码段中使用的,形如“s:***”的标号,被称为“地址标号”。    地址标号表示代码段中的指令或数据的起始(偏移地址),对地址标号的调用(call),经过编译器后,会转换为偏移地址。注意,如果直接进行运行,需要使用

2016-11-17 17:05:15 2113 1

原创 《汇编语言》学习(十五)外中断

《汇编语言》第十五章主要通过拦截“BIOS键盘输入中断例程”(int 9)为例,介绍X86 CPU外部中断的机制和处理过程。本文将简述“外中断”的基本原理和给出所有习题的答案。一、什么是外中断1,CPU的第二项功能    CPU的第一项功能是“执行指令,进行运算”,除此之外,CPU的第二项功能就是“控制外部设备”,具体来说就是,CPU对外设的IO功能(Input/Output)。

2016-11-16 09:30:19 668

原创 《汇编语言》学习(十四)端口

冯诺依曼计算机体系的简化模型就是:处于中心位置的CPU和通过总线连接的各种存储器芯片。事实上,和CPU通过总线相连的芯片除各种存储器外,还有接口芯片。CPU在控制这些芯片的时候,把存储器当作内存来对待,把所有的存储器统一编址,当作一个连续的逻辑存储器,即内存地址空间;CPU把接口芯片当作端口,也对它们进行统一编址,称为“端口地址空间”。    在冯诺依曼计算机中,CPU可以直接读写以下3个地方

2016-11-14 15:02:47 1991

原创 《汇编语言》学习(十三)int指令

int指令是X86汇编语言中最重要的指令之一。它的作用是引发中断,调用“中断例程”(interrupt routine)。本文将介绍int指令的基本原理和应用,以及BIOS和DOS系统的中断例程。一、int指令的原理1,指令原型int n注:    1)n 表示中断号,也可以称为中断类型码。n是一个字节大小的正整数,范围为“0 - 255”。2)执行“int n”时

2016-11-11 15:40:39 28182

原创 VS2010程序打包

本文主要总结VS2010打包软件的一些要点,如下图:另:详细的过程,可以参考http://www.cnblogs.com/daban/archive/2012/06/27/2565449.html

2016-11-08 16:41:51 383

原创 《汇编语言》学习(十二)内中断

《汇编语言》第12章主要介绍8086CPU的内中断的机制,包括:4种类型的内中断、中断类型码(byte-256)、中断向量表(IVT)、中断过程、中断处理函数的基本模型和iret中断返回指令。文中以“除0”中断为例,演示了中断的处理过程和如何编写及安装中断处理函数。本文将以一张思维导图总结内中断的知识点,并给出文中的所有习题答案。一、知识图谱二、习题答案检测点12.1(1)

2016-11-08 10:54:19 2431

原创 《汇编语言》学习(十一)标志寄存器

本章主要学习X86汇编语言中的各个标志寄存器及其作用。我将在本文用一张思维导图总结它的知识点,并给出所有的习题答案。一、知识图谱二、习题检测点11.1sub al,al ZF=1,PF=1,SF=0 al=00000000bmov al,1 ZF=1,PF=1,SF=0 al=00000001bpush ax ZF

2016-11-03 14:39:42 764

原创 《汇编语言》学习(十)call and ret

《汇编语言》第十章主要介绍CALL和RET指令的原理。本文我将用一张知识图谱总结它的知识点,然后重点展示它的各个课后习题。1,知识图谱    CALL和RET是为函数调用和函数返回准备的一对汇编指令。他们都借助“栈空间”来存储或获取转移的目标地址。2,习题检测点10.1assume cs:codestack segment db 16 dup(0)sta

2016-10-26 10:41:49 788

原创 《汇编语言》学习(九)转移指令

《汇编语言》第九章主要介绍“转移指令的原理”。本文我将进行简单的知识介绍,并给出书中习题的答案。一、知识点    转移指令就是可以控制CPU执行内存中某处代码的指令。它可以修改IP,或同时修改CS和IP的值。1,依据位移进行转移的jmp指令    jmp short 标号    jmp near 标号    这两种格式的jmp指令的原理是:1)编译器计算jmp指令到目标

2016-10-24 14:04:32 641

原创 《汇编语言》学习(八)数据处理

《汇编语言》第8章主要从“数据处理”的两个基本问题(“where and how long”)开始,介绍汇编语言中高级的寻址方式,特别是对结构体数据的访问。    本文先以一张知识图谱总结该章的知识点,然后再列举该章的几个重点程序,进行详细讲解。一、知识图谱二、结构化数据的处理    计算机是进行数据处理、运算的机器,计算机要处理数据,首先要知道“数据在哪”(whe

2016-10-18 16:19:52 793

原创 《汇编语言》学习(七)寻址

《汇编语言》第7章主要介绍汇编语言中的几种寻址方式,除了一般的“段+偏移”外,对于数组,还有“基地址+索引”这种类似C语言的寻址方式。本章的学习主要在于对各种寻址方式的理解和灵活运用——不同的寻址方式是为了更好地解决不同应用场景下的问题而设计的。    本文我将先给出一个知识图谱,然后再列几个小程序演示这一课的重点内容。一、知识图谱二、程序清单1,大小写转换assume

2016-10-17 15:15:53 568

原创 《汇编语言》学习(六)多个段的程序

《汇编语言》第六章主要讲述“如何编写包含多个段的汇编源程序”。本章的文字内容不多,主要通过编程实践来理解汇编源程序架构的含义,通篇学下来,我觉得有以下几点需要理解清楚:1,这里所说的多个段(segment),从汇编“程序”的角度来说,它指的是程序所占用的内存空间的划分,大致分为:data segment、stack segment和code segment。其实际就是指定运行时CPU的

2016-10-11 16:10:03 1262

原创 《汇编语言》学习(五)循环

《汇编语言》第五章主要介绍在汇编语言中如何使用循环和在循环中使用变量,以及使用循环从一段内存复制二进制信息到另一段内存,共三个话题。这三个话题的关键词(key word)分别是:loop、[bx]和segment prefix(段前缀)。    本文我将对这三个话题进行简单描述,并给出一张思维导图总结该章节的知识点,最后重点讨论该章节的课后实验题。一、知识点总结1,循环    汇编

2016-10-10 12:17:52 2713

原创 《汇编语言》学习(四)汇编程序

《汇编语言》第四章主要介绍“汇编程序从源码编写到执行和调试的过程”,包括:源码编写、源码构成、编译和链接、加载和返回shell、运行和调试。    本章是一般原理性的内容,没有安排练习题,只有一个实验题。在此,我将用一个思维导出来总结本章的知识点,并分享我搭建实验环境的过程,和给出实验题调试过程。一、知识图谱二、环境搭建    本系列第一篇博文我就提到了,我的汇编学习环境是

2016-09-29 16:59:57 737

原创 《汇编语言》学习(三)内存访问

    《汇编语言》第三章主要介绍CPU对内存的访问方式:通用内存访问方式和栈内存访问方式。通用内存和栈内存只是访问方式不同,在存储器上没有区别。CPU对内存的访问都是通过“段+偏移”的方式,其中通用内存访问方式,应用的是DS寄存器指定待访问内存的段地址,偏移量直接用数值表示,相关的指令是“mov指令”;而栈内存访问方式,通过SS指定栈空间的段地址,SP指定偏移量,相关的指令是“push/pop”...

2016-09-23 16:31:19 1187

原创 Python学习(资源帖)

大部分资源来自google搜索:1,官网:https://www.python.org/    提供安装包下载、帮助文档和社区等2,文档:http://python.usyiyi.cn/    python官方中文文档3,博客教程:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac927

2016-09-22 17:22:13 675

原创 Windows虚拟机

1,Windows虚拟机https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/下载win7-102,讲解http://www.iplaysoft.com/windows-test-vms.html3,win10使用版本https://developer.microsoft

2016-09-19 17:26:51 499

原创 《汇编语言》学习(二)寄存器

    本文将总结《汇编语言》第二章——寄存器,相关知识点和习题答案。一、习题答案检测点2.11,写出下面每步运算后的结果mov ax, 62627        AX = f4a3 Hmov ah, 31H           AX = 31a3 Hmov al, 23H            AX = 3123 Hadd ax, ax               A...

2016-09-18 17:22:29 912

原创 《汇编语言》学习(一)基础知识

最近看了谢恩铭同学的博客“学习汇编对编程有什么帮助”(http://www.jianshu.com/p/ef4b0442b3ce),感觉很有必要系统地学习一下汇编语言,于是把书架上的《汇编语言》(第三版,王爽著)拿了出来,加入了最近的学习计划中。    本系列文章主要分享我在学习过程中的心得和知识点总结,以及课后习题的答案。    除谢恩铭分享的答案外,我还在网上搜到如下答案文档:ht

2016-09-18 15:12:28 1005

原创 借助process explorer调试一个线程意外死亡的bug

本文记录我近期在项目中碰到的一个真实案例——“一个线程意外死亡的bug”的分析定位过程,借此展示我们在软件调试的过程中,除了使用调试器单步跟踪外,还可以借助一些外部观察工具来辅助,比如:process explorer。一、案例描述    近期一同事休假,扔下一堆代码项目给我维护。该项目有一个GUI窗口,窗口上有两个按键——btnA和btnB,分别控制两个工作线程thA和thB。其中,th

2016-09-13 16:25:46 1574

原创 WinDbg学习(一)入门

本文主要介绍WinDbg的入门知识,包括:下载安装、启动、配置和简单的用户模式调试示例。在我学习WinDbg的过程,主要参考了“WinDbg软件自带的用户手册”和http://www.dbgtech.net/blog/。其中,dbgtech网站的作者还制作了“http://www.dbgtech.net/windbghelp/”,在线的中文windbg帮助文档。一、下载安装

2016-09-13 11:01:22 7257 1

原创 C++11创建一个跨平台线程池

看完《Windows核心编程》的“线程池”这一章后,仅仅是学到了几个Windows线程池相关的API的,并没有触及到线程池是如何实现的这个层次,总感觉意犹未尽,特别手痒,想要自己实现一个简单的线程池。偶然的,想起了之前买的祁宇老师的《深入应用C++11》中,有一章介绍“使用C++11实现一个线程池”,于是按照原书敲了一顿代码,在VS下顺利运行起来了,兴奋不已。然后,再深入一想,既然是纯C++实现的

2016-09-07 14:43:47 1625

原创 一招搞定“C语言声明式”类型的面试题

在C语言面试中,经常会考查面试者对“C语言声明式”的理解,这类题型听起来就像绕口令一样,一不小心就容易将人绕到沟里,比如:题1:说明如下四种声明式的区别1)const char * p;2)char const * p;3)char * const p;4)const char * const p;题2:写出如下几种要求的声明式(或定义式)1)一个有10个指针的

2016-09-06 16:54:08 737

原创 《Windows核心编程》之“线程池”

本文主要结合四个应用场景介绍Windows内置的几种线程池机制,并配了一张思维导图。事实上,Jeffrey在该书中,并没有过深的去探讨“线程池”的机制,Windows所提供的这四种线程池机制也并非所有场景都合适,后续我将会单独开一篇博客来自己实现一个线程池。    如上图,本文主要介绍这四个线程池应用场景。一、异步函数调用    它的流程大致分为三步,参考batch.exe示例

2016-09-05 14:15:01 907

原创 《Windows核心编程》之“完成端口”

《Windows核心编程》第10章开头部分一再强调:“IO Completion Port”是“构建高性能、可升缩的应用程序”的最佳设施之一,它不仅适用于处理设备IO,也适用于其它越来越多的应用场景,比如:Job内核对象、Socket编程等。故此,我单独用一篇博客来讲述“IO Completion Port”的应用场景、原理、用法和示例。一、缘起1,线程通信 对于一...

2016-09-02 14:53:42 1411

原创 《Windows核心编程》之“同步IO和异步IO”

本文主要通过一张思维导图来总结Windows编程中关于设备IO的相关知识,其中,“IO Completion Port”后面会单独用一个系列文章进行介绍,在此不再展开。

2016-08-29 14:33:34 587

原创 《Windows核心编程》之“堆”

本文我将用一张思维导图来总结“堆”相关的知识点。

2016-08-26 15:50:42 608

原创 《Windows核心编程》之“内核对象同步”

本文主要总结如何使用“kernel object”来实现线程间的同步。与用户模式下的同步方法相比,内核对象同步的效率会相对要低一些(需要切换到内核模式下),但是,它可以跨进程使用,而且在编程上也更简单。    除了总结知识点,我还分析了内核对象同步实现的Queue.exe的示例代码,并与上一篇的Queue.exe进行了简单对比。最后,我将介绍微软提供的一种诊断死锁问题的手段:Wait Chai

2016-08-26 11:01:59 652

原创 《Windows核心编程》之“用户模式同步”

本文我将用一张思维导图来总结“用户模式下线程同步”的各个知识点,然后再分析书中给出的“Queue”示例代码。Queue示例代码分析:一、功能简介    该示例实现了一个简单的“client/server”模式的“producer .vs consumer”案例。待保护资源是 一个全局queue,client端有四个writer线程向该queue发送入队request,并

2016-08-24 11:19:52 500

原创 《Windows核心编程》之“线程调度和优先级”

  “线程调度和优先级”这一章主要讲解 Windows 的线程调度的机制,特别是线程上下文切换(context switch)。由于 Windows 并非“实时操作系统”,在线程调度方面留给程序员操作的空间很少,因此,这一章对实际编程的帮助并不大,如果仅仅是想了解一些基本原理,建议通读一遍即可,或者仅阅读前面 4 个小节。 本章最重要的一个概念就是“线程上下文切换”(context sw...

2016-08-23 11:04:14 793

原创 《Windows核心编程》之“线程基础”

  本文主要介绍线程的一些基础知识,包括:线程内核对象、线程的创建和退出、线程的初始化和线程上下文等,可以用下面这张思维导图来总结。一、线程VS进程 内核对象 地址空间 进程 进程内核对象 进程地址空间 线程 线程内核对象 线程栈 进程是线程的容器,线程依赖于进程的上下文。 线程要在某个进程的地址空间内执行代码和处理数据。...

2016-08-22 16:43:59 420

原创 《Windows核心编程》之“进程”

    本文我尝试用一张思维导图来总结我对《Windows核心编程》CH4“进程”这一章内容的理解,然后针对一些感兴趣的内容展开来谈谈我的理解。建议大家在阅读这一章时,认真阅读示例程序“ProcessInfo.exe”,它是一个迷你版的“procexp.exe”,通过对“ProcessInfo.exe”的学习,可以加深对 procexp.exe 的认识和掌握高级用法。 一、知识图谱...

2016-08-22 14:08:59 1131

《Windows驱动开发技术详解》源码

《Windows驱动开发技术详解》一书的源码,包括:DDK 编译版本和VC 版本。

2019-02-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除