CONTAINING_RECORD的实现
// 9.25.cpp : 定义控制台应用程序的入口点。
//
/*----------------------------CONTAINING_RECODER的实现------------------------*/
#include "stdafx.h"
#include <windows.h>
typedef struct _DATA_
{
int a;
int b;
int c;
int d;
}DATA,*PDATA;
DATA Sub_1();
DWORD WINAPI VectoredHandler(PEXCEPTION_POINTERS Exception);
int main()
{
DATA Object;
Object.a = 10;
Object.b = 20;
Object.c = 30;
Object.d = 40;
int* v1 = &Object.c; //c的绝对地址
ULONG_PTR v2 = (ULONG_PTR)&((PDATA)0)->c; //c与结构体的相对地址
ULONG_PTR* v3 = (ULONG_PTR*)((ULONG_PTR)v1 - v2); //计算出结构体绝对地址
printf("%d\r\n", ((PDATA)v3)->a);
printf("%d\r\n", v2); //c与结构体的相对地址
printf("%d\r\n", Object.a);
return 0;
}
CONTAINING_RECORD的实现的更多相关文章
- 我对CONTAINING_RECORD宏的详细解释
宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的指针来推算出该结构体的指针! 下面从一个简单的例子开始说起: 我们定义一个结构体, ...
- CONTAINING_RECORD 宏
Windows中提供了一个宏 #define CONTAINING_RECORD (address, type, field ) ((type *)( \ (PCHAR)(address ) - \ ...
- C++小技巧之CONTAINING_RECORD
CONTAINING_RECORD Containing record是一个在C++编程中用处很大的一种技巧,它的功能为已知结构体或类的某一成员.对象中该成员的地址以及这一结构体名或类名,从而得到该对 ...
- IOCP入门
完成端口(Completion Port)详解 此文讲解最好,也很全面一下其他文章看看就行,也可不看. 单句柄数据,单IO数据 此文讲述比较清晰,可以辅助理解上文. IOCP编程之基本原理:http: ...
- CmRegisterCallback使用方法
部分代码 #include "my_sys_fun.h"#ifdef __cplusplusextern "C"{#endif //驱动加载函数 NTSTATU ...
- 枚举PEB获取进程模块列表
枚举进程模块的方法有很多种,常见的有枚举PEB和内存搜索法,今天,先来看看实现起来最简单的枚举PEB实现获取进程模块列表. 首先,惯例是各种繁琐的结构体定义.需要包含 ntifs.h 和 WinDef ...
- [Windows驱动开发](四)内存管理
一.内存管理概念 1. 物理内存概念(Physical Memory Address) PC上有三条总线,分别是数据总线.地址总线和控制总线.32位CPU的寻址能力为4GB(2的32次方)个字 ...
- iocp-socket 服务(借鉴别人的,根据自己的需要改的)未完待续
#pragma once #include <WinSock2.h> #include <MSWSock.h> #include <Windows.h> #prag ...
- 完成端口(Completion Port)详解(转)
手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解 ...
随机推荐
- js 对多sheet Excel赋值操作
function ExpExcel(){ var tempStr = ""; var filePath ="" var excelname=ReportFile ...
- python走起之第十三话
前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中 ...
- linux系统下静态IP的设置
首先说明:下面用的系统为:kali 4.6.0版本的哦:不同的系统是不一样的:反正吧,在ubuntu上的好多方法在kali上就不管用,并且吧,不同的ubuntu的版本也不一样的: 第一步:设置网络的I ...
- Linux 内核编译
注:该文章部分内容摘录自以下链接. http://www.cnblogs.com/zhunian/archive/2012/04/04/2431883.html 创建内核的第一步是创建一个 .conf ...
- /boot/grub/device.map【设备映射】
grub-install 安装 GRUB 在第一个硬盘的 MBR: # grub-install '(hd0)' grub-install 会先搜寻设备对应的文件(/boot/grub/device. ...
- 【转载】js 各种复制到剪贴板
一.实现点击按钮,复制文本框中的的内容 <script type="text/javascript"> function ...
- 在后台启动受管服务器经常报错:Server may already be running
报错如下: 1. Unable to obtain lock on /usr/local/odrive/odrive_chen/Middleware/user_projects/domains/oim ...
- SQL Server Reporting Service(SSRS) 第一篇 我的第一个SSRS例子
很早就知道SQL SERVER自带的报表工具SSRS,但一直没有用过,最近终于需要在工作中一展身手了,于是我特地按照自己的理解做了以下总结: 1. 安装软件结构 SSRS全称SQL Server Re ...
- Java小游戏贪吃蛇
package snake; import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java ...
- ireport5.6+jasperreport6.3开发(二)--web开发的配置
ireport5.6只能编译出*.jasper的报表包,最终报表需要被输出为一个doc html pdf excel等文件,这时就需要jasperreport6.5的库进行配合了. jasperrep ...