2012-03-17 63 views
1

我将以下四行代码编译到一个名为foo.exe的文件中,希望全局变量'i'(即9)的值将进入数据部分foo.exe的exe中的数据部分的数据

int i = 9;  
int main() 
{ 
} 

然后我用下面的代码,以找出是否真的是foo.exe的的.data节,但没有发现任何东西..有人可以解释我什么地方出了错。 ??

#include<iostream> 
#include<Windows.h> 
#include<stdio.h> 
#include<WinNT.h> 


int main() 
{ 

HANDLE hFile; 
HANDLE hFileMapping; 
LPVOID lpFileBase; 
PIMAGE_DOS_HEADER dosHeader; 

hFile = CreateFile(TEXT("foo.exe"), GENERIC_READ, FILE_SHARE_READ, NULL, 
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); 

if (hFile == INVALID_HANDLE_VALUE) 
{ 
    printf("Couldn't open file with CreateFile()\n"); 
    return 0; 
} 

hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); 
if (hFileMapping == 0) 
{ 
    CloseHandle(hFile); 
    printf("Couldn't open file mapping with CreateFileMapping()\n"); 
    return 0; 
} 

lpFileBase = MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0); 
if (lpFileBase == 0) 
{ 
    CloseHandle(hFileMapping); 
    CloseHandle(hFile); 
    printf("Couldn't map view of file with MapViewOfFile()\n"); 
    return 0; 
} 


PIMAGE_DOS_HEADER pimdh; 
pimdh = (PIMAGE_DOS_HEADER)lpFileBase; 

PIMAGE_NT_HEADERS pimnth; 
pimnth = (PIMAGE_NT_HEADERS)((char *)lpFileBase + pimdh->e_lfanew); 

PIMAGE_SECTION_HEADER pimsh; 
pimsh = (PIMAGE_SECTION_HEADER)(pimnth + 1); 

PIMAGE_IMPORT_DESCRIPTOR pimid; 
long delta; 

for(int i = 0; i<pimnth->FileHeader.NumberOfSections;i++) 
{ 
    if(!strcmp((char *)pimsh->Name,".data")) 
    { 
     DWORD base = (DWORD)lpFileBase; 
     for(DWORD start = pimsh ->PointerToRawData; start <= (pimsh->PointerToRawData + pimsh->SizeOfRawData); start++) 
     { 
      if(*((int *)(start + base)) == 9) 
      { 
       printf("found"); 
       break; 
      } 
     } 
    } 
    pimsh++; 
} 

} 

回答

3

编译器(链接器)没有把你的变量放在图像文件中,因为变量甚至没有在代码中使用!