
C++
文章平均质量分 67
SauceJ
这个作者很懒,什么都没留下…
展开
-
typedef的用法总结
原链接转载 2014-05-05 13:43:30 · 545 阅读 · 0 评论 -
C++代码反汇编后的函数调用过程,堆栈寄存器EBP和ESP
栈是从高地址向低地址生长的。 ebp始终指向当前栈帧的栈底部 ,转载 2014-09-15 11:24:34 · 1466 阅读 · 0 评论 -
VC++检测VM、VPC虚拟机代码 .
C++检测VM、VPC虚拟机代码,添加后只需要调用IsVirtualMachine即可判断是否在虚拟机运行!AntiVM.h转载 2014-09-17 09:54:14 · 1278 阅读 · 0 评论 -
深入剖析PE文件
一、 基本结构。转载 2014-09-25 11:16:35 · 1047 阅读 · 0 评论 -
WinXP/Win7/Win8通用shellcode
转自http://hi.baidu.com/egodcore/item/c13e67fe197c940fc6dc45f5众所周知,在windows xp时代未启用ASLR(Address space layout randomization,堆栈地址随机分布),我们在编写shellcode可以利用硬编码法,将地址写入shellcode,但是这种方法的缺点很明显--不具备通用性。在xp sp转载 2014-09-17 14:17:17 · 1404 阅读 · 0 评论 -
LDR链调试手记(TEB获取动态函数地址)
转自看雪LDR链调试手记 无论是编写ShellCode还是外壳程序,都需要动态的获取各个api的实际地址,最通用的方法之一,莫过于通过得到各个DLL模块的基址,再遍历其导出表。其中,获得各个模块基址中,通过PEB结构来获取的方法尤为的精简和通用。这里是我之前调试和学习时碰到的一些问题的总结,于是就有了这一篇手记。转载 2014-09-28 10:14:51 · 2532 阅读 · 0 评论 -
windows 下的C标准库, C运行库(CRT ,run-time), windows API 解释. 以及linux C扩展
C运行库和C标准库的关系转载 2014-10-31 10:29:08 · 2984 阅读 · 0 评论 -
C/C++浮点数在内存中的存储方式
任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100。则在Intel CPU架构的系统中,存放方式为 10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式。但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法转载 2014-12-17 11:45:47 · 788 阅读 · 0 评论 -
JAVA与C++的多态异同
Java中的多态。将一个方法调用同一个方法主体(大多时候为派生类)关联起来被称做绑定。在程序执行前进行绑定,由编译器和链接程序实现称为前期绑定。后期绑定:也称动态绑定(在程序运行过程中动态实现绑定)如果一种语言想实现后期绑定,就必须具有某种机制,以便在运行时能判断对象的类型,从而调用适当的方法。 也就是说,编译器不知道对象的类型,但是方法调用机制能找到正确的方法体,并加以调用。后期绑定原创 2015-01-07 21:00:32 · 652 阅读 · 0 评论 -
PEB结构的获取
PEB结构----枚举用户模块列表。PEB原创 2014-08-15 10:44:59 · 3671 阅读 · 0 评论 -
PE文件基址重定位
PE文件基址重定位(Base Relocation),程序编译时每个模块有一个优先加载地址ImageBase,这个值是连接器给出的,因此连接器生成的指令中的地址是在假设模块被加载到ImageBase前提之下生成的,转载 2014-09-01 14:29:00 · 1361 阅读 · 0 评论 -
Wincap在vc下的编译错误
配置:从wincap官网下载开发开发包后,将include 和lib两个目录包含到vc中的huanjin原创 2014-05-05 15:58:18 · 821 阅读 · 0 评论 -
在Visual Studio下编写64位应用程序的注意事项
一、确定在64位操作系统上运行还是在WOW64下运行。 在Visual Studio平台中最后对64位应用程序编译时,需要指定这个应用程序是在64位操作系统上作为本机应用程序运行还是在WOW64环境下运行。这个WOW64环境是一个由操作系统提供的兼容性环境。这个环境主要是让32位应用程序也能够在64位的操作系统上运行。换句话说,在编译时要确定产生的应用程序是真正的64位应用程序(只能够在转载 2014-05-08 12:39:04 · 1169 阅读 · 0 评论 -
Tips
当VS不自动提示,只有按ctrl+j出来提示时候转载 2014-05-08 12:43:43 · 434 阅读 · 0 评论 -
线程间通信(信号,数据)
线程间的通信包括两种方式,线程之间的(完成某事件的)信号传递跟线程之间的数据传递。对于信号传递有两种方式:一:线程消息传递1利用用户定义的消息通信在Windows程序设计中,应用程序的每一个线程都拥有自己的消息队列,甚至工作线程也不例外,这样一来,就使得线程之间利用消息来传递信息就变的非常简单。首先用户要定义一个用户消息,如下所示:#define WM_USERMSG WMUS原创 2014-05-18 22:47:26 · 916 阅读 · 0 评论 -
C/C++沉思-----多态时一定要将父类(基类)的析构函数定义为虚函数
//test.cpp #include using namespace std; class father { public: father() { mPtr = new int; } ~father() { delete mPtr; cout转载 2014-05-19 14:33:19 · 871 阅读 · 0 评论 -
c++ 使用map文件查找程序崩溃原因(通过VA定位源程序行号)
一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一个比较好的方法来找原因,通过生成map文件,由于2005取消map文件生成行号信息(vc6.0下是可以生成行号信息的,不知道microsoft怎么想的,在2005上取消了),只能定位在那个函数发生崩溃。这里可以通过生成cod文件,即机器码这一文件,具体定位原创 2014-07-08 09:38:00 · 2078 阅读 · 0 评论 -
内存偏移(RVA)与文件偏移(offset)相互转换
写此文源于前一阵写一个PE修改工具,需要用到内存偏移向文件偏移转化。转载 2014-09-19 11:26:20 · 4164 阅读 · 1 评论 -
关于#pragma code_seg
在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的, 且对于每个编译器都是不同的。其格式一般为: #Pragma Para 其中Para 为参数,下面来看一些常用转载 2014-08-25 11:52:33 · 1744 阅读 · 0 评论 -
VS2010生成exe在别的机子上运行提示“丢失MSVCR100D.dll”
http://woshao.com/article/ab67bbe640f511e081e1000c2959fd2a/用vs2010编写的程序经常会发生的一个问题。在自己的机器上运行的好好的,但是在别的机器上就会发生没有找到MSVCR100D.dll。这是个很头疼的问题。对于一些代码量几百行的小程序,我不可能要求其他电脑也一定要配有MSVCR100D.dll这个dll。当然解决方法也有,但转载 2015-01-29 16:41:04 · 1089 阅读 · 0 评论