摘要:编译器:VS2015 调用约定的直观认识: __stdcall是微软自己搞出来的, c、c++的默认调用方式是_cdecl, 另外还有优化的__fastcall(通过寄存器传递参数) 以及c++的,thiscall(不能直接使用) 还有naked call (可参考http://blog.csdn.
阅读全文
摘要:// ShStringNew.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; class SHString { public: SHString(const char* Str = "") :mStr(new char[strlen(Str) + 1]) { st...
阅读全文
摘要:#include using namespace std; template struct ListNode { T Data; ListNode* Flink; ListNode() { Flink = NULL; } ListNode(T SHData, ListNode* SHFlink = NULL) { Data = SHData; Flink = SHFlink;...
阅读全文
摘要:在X64模式中,存在的问题是JMP指令和整个地址空间相比仅仅覆盖了很窄的范围。因此引入一个中继函数(Relay Function)来实现对64位Detour函数地址的跳转。 在hook的分析之前,先谈一下前一篇帖子评论中的相关话题。 之前发布的一篇Minhook分析,有大牛说没有写出多线程安全,指令
阅读全文
摘要:0x01 概念 单例模式最初的定义出现于《设计模式》(艾迪生维斯理):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。” 单例模式该的实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的构造是一个pub
阅读全文
摘要:1.从虚函数的调用机制上看,如果构造函数为虚函数的话,那函数地址将存储在虚表,将由虚表指针来访问续表,而虚表指针是类对象的第一个数据成员,类对象又要由构造函数产生,所以构造函数不能是虚函数。 2.从构造函数的作用来看,构造函数的作用是提供初始化,在对象生命期只执行一次,不是对象的动态行为,也没有必要
阅读全文
摘要:Windows的应用程序是事件(消息)驱动的。它们不会显式地调用函数(如C运行时库调用)来获取输入,而是等待windows向它们传递输入。 windows系统把应用程序的输入事件传递给各个窗口,每个窗口有一个函数,称为窗口消息处理函数。窗口消息处理函数处理各种用户输入,处理完成后再将控制权交还给系统
阅读全文
摘要:大二时候的代码以及笔记,当时暂时记录在QQ上在,现在发出来分享一下。 为了写驱动装一大堆的软件插件啥的,还常常失败。这里就顺带总结下SDK下载和WinDbg symbol路径设置正确WinDbg却总是无法找到symbol文件的问题。(当然我的失败解决或者说问题原因的解决不是屡试不爽的,这里仅供您参考
阅读全文
摘要:1.重载:overload,是指同一可访问区内被声明的几个具有不同参数列表(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。 2.隐藏(重定义):隐藏是指派生类的函数屏蔽了与其同名的基类函数。注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏。
阅读全文
摘要:百度百科的解释是:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。 实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元。栈帧表示程序的函数调用记录,而栈帧又是记录在栈上面,很明显栈上保持了多个栈帧的实体。
阅读全文
摘要:MinHook的原理就在于重写目标函数。在这次分析的X86模式中,32位相对JMP覆盖了整个地址空间。因为在相对地址计算中溢出的位被忽略,所以在X86模式中,函数的地址是容易掌控的。 直接来进入正题。 使用时需要通过#pragma来导出模块定义文件 (.def)中的DLL函数: LIBRARY EX
阅读全文
摘要:C++多态的实现原理,一言以蔽之:在父类中存在虚函数(virtual),如果在子类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。由于虚函数的存在,编译器实行运行时绑定的机制,如果运行时实际指向的对象类型是子类的对象,就调用子类的虚函数;如果运行时实际指向的对象类型是父类的对象,就调用父
阅读全文