6
안녕 얘들 아 내가이 이상한 문제를 가지고 내가 잘못하고 있어요 어디에서 모르는 문제는 델파이 연산자 "에서"...
나는 그 어디 다음 코드는 그것의 끝에서 찾아보세요있다 내가if (ep>=tmp1) and (ep<=tmp2)
으로 그 선을 대체 할 수 물론
var
IDH:PImageDosHeader;
INH:PImageNtHeaders;
ISH:PImageSectionHeader;
buf:Pointer;
FS:TFileStream;
ep,tmp1,tmp2:DWORD;
i:Word;
begin
if OpenDialog1.Execute then
begin
FS:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
GetMem(buf,FS.size);
FS.Read(buf^,FS.Size);
FS.Free;
IDH:=PImageDosHeader(buf);
INH:=PImageNtHeaders(DWORD(buf) + DWORD(IDH^._lfanew));
ep:=INH^.OptionalHeader.AddressOfEntryPoint;
for i:=0 to INH^.FileHeader.NumberOfSections - 1 do
begin
ISH:=PimageSectionHeader(DWORD(INH) + sizeof(TImageNtHeaders) + i * sizeof(TImageSectionHeader));
tmp1:=ISH^.VirtualAddress;
tmp2:=ISH^.VirtualAddress + ISH^.Misc.VirtualSize;
ShowMessageFmt('%d -> %d .. %d',[ep,tmp1,tmp2]);
if ep in [tmp1..tmp2] then ShowMessage('Got it'); //This fails even if ep is in the defined interval. Why?
end;
end;
end;
... 내가 그것을 주석에 실패하지만 난 내가 뭘 잘못 알고 싶어요.
지금 고맙습니다. – opc0de
@ opc0de : FWIW, 나는 정말로 컴파일러가 이것에 대해 뭔가를 말해야한다고 생각합니다. 적어도, 그것은 경고를해야합니다 ... –
어쩌면 미래 버전 :)) – opc0de