C++获取当前进程IAT的方法

本文实例讲述了C++获取当前进程IAT的方法,分享给大家供大家参考。

具体实现方法如下:

代码如下:

#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
 HMODULE hModule = ::GetModuleHandleA(NULL);
 IMAGE_DOS_HEADER* pDosHeader = (IMAGE_DOS_HEADER*)hModule;
 IMAGE_OPTIONAL_HEADER* pOpNtHeader = (IMAGE_OPTIONAL_HEADER*)((BYTE*)hModule + pDosHeader->e_lfanew + 24); //这里加24
 IMAGE_IMPORT_DESCRIPTOR* pImportDesc = (IMAGE_IMPORT_DESCRIPTOR*)((BYTE*)hModule + pOpNtHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);

while (pImportDesc->FirstThunk)
 {
  char* pszDllName = (char*)((BYTE*)hModule + pImportDesc->Name);
  printf("模块名称:%s\n", pszDllName);

DWORD n = 0;
  //一个IMAGE_THUNK_DATA就是一个导入函数
  IMAGE_THUNK_DATA* pThunk = (IMAGE_THUNK_DATA*)((BYTE*)hModule + pImportDesc->OriginalFirstThunk);
  while (pThunk->u1.Function)
  {
   //取得函数名称
   char* pszFuncName = (char*)((BYTE*)hModule+pThunk->u1.AddressOfData+2); //函数名前面有两个..
   printf("function name:%-25s,  ", pszFuncName);
   //取得函数地址
   PDWORD lpAddr = (DWORD*)((BYTE*)hModule + pImportDesc->FirstThunk) + n; //从第一个函数的地址,以后每次+4字节
   printf("addrss:%X\n", lpAddr);
   n++; //每次增加一个DWORD
   pThunk++;
  }
  printf("\n");
  pImportDesc++;
 }
 return 0;
}

希望本文所述对大家的C++程序设计有所帮助。

(0)

相关推荐

  • C++封装IATHOOK类实例

    本文实例讲述了C++封装IATHOOK类的实现方法.分享给大家供大家参考.具体方法如下: 1. 定义成类的静态成员,从而实现自动调用 复制代码 代码如下: static CAPIHOOK sm_LoadLibraryA;  static CAPIHOOK sm_LoadLibraryW;  static CAPIHOOK sm_LoadLibraryExA;  static CAPIHOOK sm_LoadLibraryExW;  static CAPIHOOK sm_GetProcAddres

  • C++中I/O模型之select模型实例

    本文实例讲述了C++中I/O模型的select模型用法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: void main()  {      CInitSock initSock;      USHORT nPort = 9999; //监听的端口      SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);      if (sListen == INVALID_SOCKET)      {       

  • C++广播通信实例

    本文实例讲述了C++实现广播通信的方法.分享给大家供大家参考.具体实现方法如下: 广播通信代码框架: 1. 协议都是: 复制代码 代码如下: SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0); 2. 服务端设置选项 复制代码 代码如下: BOOL bBroadcast = TRUE;  ::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL)); 3. 服务端向255

  • C#判断ip地址是否可以ping的通

    复制代码 代码如下: Ping pingSender = new Ping(); PingReply reply = pingSender.Send("127.0.0.1",120);//第一个参数为ip地址,第二个参数为ping的时间 if(reply.Status == IPStatus.Success) { //ping的通 } else { //ping不通 }

  • C++计算ICMP头的校验和实例

    本文实例讲述了C++计算ICMP头的校验和的方法,分享给大家供大家参考.具体实现代码如下: 复制代码 代码如下: USHORT checksum(USHORT* buff, int nSize)  {      unsigned long cksum=0;      //将数据以字为单位加到cksum      while (nSize > 1)      {          cksum += *buff++;          nSize -= sizeof(USHORT);      } 

  • C#使用ping命令的两个例子

    方法一:调用cmd 的ping命令 private static string CmdPing(string strIp) { Process p = new Process(); p.StartInfo.FileName = "cmd.exe";//设定程序名 p.StartInfo.UseShellExecute = false; //关闭Shell的使用 p.StartInfo.RedirectStandardInput = true;//重定向标准输入 p.StartInfo.

  • C++实现ping程序实例

    本文实例讲述了C++实现ping程序的方法.分享给大家供大家参考.具体实现方法如下: 该实例涉及ICMP数据包的发送与回显,PING程序代码如下: 复制代码 代码如下: DWORD WINAPI ThreadProc(LPVOID lParam) {  CInitSock initSock;    HWND hWnd = (HWND)lParam; //从参数得到句柄  char szIp[64] ={0};  ::GetDlgItemTextA(hWnd, IDC_IP, szIp, size

  • C++获取本机MAC,IP,MASK地址的方法

    本文实例讲述了C++获取本机MAC,IP,MASK地址的方法,分享给大家供大家参考.具体方法如下: 复制代码 代码如下: #include "InitSock.h"  #include <stdio.h>    #include <iphlpapi.h>  #pragma comment(lib, "IPHLPAPI.lib")    u_char g_ucLocalMac[6];  DWORD g_dwGatewayIP;  DWORD g

  • C++实现修改函数代码HOOK的封装方法

    本文实例讲述了C++实现修改函数代码HOOK的封装方法,分享给大家供大家参考.具体实现方法如下: 一.对外的接口如下: 1. 类初始化时对函数HOOK 2. 取消挂钩: void UnHook(); 3. 重新挂钩: void ReHook(); 在初始化时HOOK的代码: 复制代码 代码如下: *(DWORD*)(m_btNewBytes+1) = (DWORD)pfnHook; 8个字节的代码地址 0xB8, 0x00, 0x00,0x40,0x00,0xFF,0xE0,0x00  只要把第

  • C++取得本机IP的方法

    本文实例讲述了C++取得本机IP的方法,分享给大家供大家参考.具体方法如下: 核心代码如下: 复制代码 代码如下: //取得本机IP,在状态栏中显示  char szHostName[MAX_PATH] = {0};  ::gethostname(szHostName, MAX_PATH);  hostent *pHost = gethostbyname(szHostName);  if (pHost != NULL)  {      CString strIP;      in_addr* a

  • php模拟ping命令(php exec函数的使用方法)

    使用php模拟我们常用的DOS命令ping命令的方法,这里主要用到的是php的内置函数exec来调用系统的ping命令,从而实现ping命令功能的. 复制代码 代码如下: <?php$to_ping='www.phpernote.com';$count=2;$psize=66;echo "正在执行php ping命令,请等待...\n<br><br>";flush();while(1){ echo "<pre>"; exec

随机推荐