我今天編寫了一些代碼,將列出PE文件中的所有部分...代碼有效,但最後它會發出異常:無效的指針操作...並且我不知道爲什麼...有人可以請發現錯誤爲什麼此代碼會生成異常?
下面是代碼
procedure TForm1.Button1Click(Sender: TObject);
var
IDH:PImageDosHeader;
buf:Pointer;
INH:PImageNtHeaders;
ISH:array of TImageSectionHeader;
FS:TFileStream;
i,total:Word;
begin
if OpenDialog1.Execute then
begin
Self.Caption:=OpenDialog1.FileName;
FS:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
GetMem(buf,FS.Size);
FS.Read(buf^,FS.Size);
FS.Free;
IDH:=buf;
INH:=Ptr(Cardinal(buf)+Cardinal(IDH^._lfanew));
ISH:=Ptr(Cardinal(buf)+Cardinal(IDH^._lfanew) + Sizeof(TImageNtHeaders));
total:=INH^.FileHeader.NumberOfSections - 1 ;
for i:=0 to total do
begin
ListBox1.Items.Add(PAnsichar(@ISH[i].Name));
Application.ProcessMessages;
end;
end;
end;
@CodeInChaos不是如果你看到一個問題,你不知道什麼關於指針 – opc0de
我只是混淆了變量名稱,它們太相似了。對'ISH'的分配對我來說看起來很奇怪。我認爲'ISH'應該是一個指向普通數組而不是動態數組的指針。我很驚訝,一個無類型指針指向一個動態數組沒有明確的強制轉換。 – CodesInChaos
@CodeInChaos,我回滾了標題編輯,因爲我不認爲這個問題是由解析PE頭特別引起的;即使那些我不能發現實際的錯誤。 –