用C++ Builder 5.0编HOOK程序

豆豆网   技术应用频道   2006年03月31日  【字号: 收藏本文

本文详细介绍用C++ Builder 5.0编HOOK程序

  二,

  在Borland的Community上找到了这篇文章,可以解决这个问题了。如下:

  http://community.borland.com/article/0,1410,20008,00.html
///
C++Builder 4.0 is the first C++Builder compiler that supports shared memory segments. This document explains how to use this feature in windows DLL.
To change the data segment and the class name, you need to add #pragma option -zR[SEGMENT NAME] and #pragma option -zT[CLASS NAME] to the file you want the data shared from. Below is the source file I am going to export the integer named 'data':
File: SharedData.cpp
//---------------------------------------------------------------------------
// Borland C++Builder
// Copyright (c) 1987, 1999 Inprise Corporation. All Rights Reserved.
//---------------------------------------------------------------------------
#pragma option -zRSHSEG   // change default data segment name
#pragma option -zTSHCLASS  // change default data class name
// Here is the initialized data that will be shared.
int data = 0;
Notice that the segment name for this file is: SHSEGSHCLASS. A .def file is required for the linker to create the shared segement. Below is what the .def file looks like:
File: Shared.def
LIBRARY SHAREDDLL
SEGMENTS
  SHSEG CLASS 'SHCLASS' SHARED

  三

  当你的DLL程序被其它各个程序调用时,每调用一次,将产生一个DLL的实例,其实代码在内存中仅有一套,但DLL中的变量即数据段将 产生多个,这若干个数据段是互不干扰、是不能共享的,但在一些特殊情况下,就不能满足我们的要求了,比如,用户的全局钩子程序就 是一个.DLL,这个.DLL会被内存所有的进程调用, 如果它的数据段不能共享,就变成了多个局部钩子了,好在API已替你想好了一个间接 办法,你可用一个“共享名”申请一块共享内存块,进行读写:

责编:豆豆技术应用

正在加载评论...