我的代码是这样的。 先贴出来var
FileStream : TFileStream;
ImageDosHeader : TImageDosHeader;
NtHeader: PImageNtHeaders;
ImageNtHeader : TImageNtHeaders;
SizeOfImage : Integer;
FileBase : PChar; //文件映射后的内存地址
ImportEntry: PImageImportDescriptor;
MyImport : array of PuPe;
I : Integer;
begin
FileStream := TFileStream.Create(edt1.Text,fmOpenRead or fmShareDenyWrite);
with FileStream do
begin
ReadBuffer(ImageDosHeader,SizeOf(TImageDosHeader));
Position := ImageDosHeader._lfanew;
ReadBuffer(ImageNtHeader,SizeOf(TImageNtHeaders));
if ImageNtHeader.Signature = IMAGE_NT_SIGNATURE then
begin
SizeOfImage := ImageNtHeader.OptionalHeader.SizeOfImage;
FileBase := VirtualAlloc(nil,SizeOfImage,MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
NtHeader := PImageNtHeaders(FileBase + ImageDosHeader._lfanew);
ImportEntry := PImageImportDescriptor(FileBase + NtHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
lst1.Items.Add(IntToStr(ImportEntry.DLLName));
end
else
begin
MessageBox(0,'这不是一个PE文件','错误',0);
end;
end;end;
主要是想获取PE文件引用的DLL和函数。想先实现显示引用的DLL,但为什么ImportEntry.Dll为0呢。 麻烦看下是哪错了,谢谢大家!!!
FileStream : TFileStream;
ImageDosHeader : TImageDosHeader;
NtHeader: PImageNtHeaders;
ImageNtHeader : TImageNtHeaders;
SizeOfImage : Integer;
FileBase : PChar; //文件映射后的内存地址
ImportEntry: PImageImportDescriptor;
MyImport : array of PuPe;
I : Integer;
begin
FileStream := TFileStream.Create(edt1.Text,fmOpenRead or fmShareDenyWrite);
with FileStream do
begin
ReadBuffer(ImageDosHeader,SizeOf(TImageDosHeader));
Position := ImageDosHeader._lfanew;
ReadBuffer(ImageNtHeader,SizeOf(TImageNtHeaders));
if ImageNtHeader.Signature = IMAGE_NT_SIGNATURE then
begin
SizeOfImage := ImageNtHeader.OptionalHeader.SizeOfImage;
FileBase := VirtualAlloc(nil,SizeOfImage,MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
NtHeader := PImageNtHeaders(FileBase + ImageDosHeader._lfanew);
ImportEntry := PImageImportDescriptor(FileBase + NtHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
lst1.Items.Add(IntToStr(ImportEntry.DLLName));
end
else
begin
MessageBox(0,'这不是一个PE文件','错误',0);
end;
end;end;
主要是想获取PE文件引用的DLL和函数。想先实现显示引用的DLL,但为什么ImportEntry.Dll为0呢。 麻烦看下是哪错了,谢谢大家!!!
解决方案 »
- 遍历两个panel上的控件
- delpphi实时监控数据库
- 怎样控制windows右键弹出菜单的某个子项?
- 在delphi里怎样实现将dbf文件里的内容完全删除?就好像foxpro里的pack命令的效果那样
- 关于定时轮询方面的问题,有经验的进来看看
- 有关Active控件的问题(单独给200)sos!!!
- 怎样实现用Edit控件动态显示数据表中的数据,即用edit实现dbedit的功能,“代码”??
- help workshop 帮助文档快速制作索引的问题
- 请问怎么用Unit作为程序启动的入口,而不是用窗体作为启动。(delphi2005)在线等。
- 一个简单的问题、、、
- class tcell not found,问题这是缺少那个组件呢.
- 请问怎样在DELPHI中切换EXCEL数据文档的SHEET?
这个貌似只是判断一个文件是不是PE,黑防杂志的11期有Delphi的源码,楼主可以找下