Delphi 通过TDISSM实例进行入口点、指针和反汇编

Delphi 通过TDISSM实例进行入口点、指针和反汇编,delphi,exe,disassembly,portable-executable,entry-point,Delphi,Exe,Disassembly,Portable Executable,Entry Point,使用Russell Libby,反汇编过程/函数/方法只需将一个(一致的)指针传递到过程tdisam.反汇编(地址:指针;大小:基数=0) 到目前为止,我已经成功地反汇编了任何任意过程/方法,即使是从加载的外部模块(BPL/DLL)中反汇编,只要它们被适当地导出 从当前进程(windows loader加载的EXE映像)中,我希望获得指向入口点的有效指针 我想提出一些类似于(交互式Delphi编译器)的东西,它是通过代码查看器选项卡提供的,但来自运行Exe的实例本身 怎样才能做到呢?目前我对P

使用Russell Libby,反汇编过程/函数/方法只需将一个(一致的)指针传递到
过程tdisam.反汇编(地址:指针;大小:基数=0)

到目前为止,我已经成功地反汇编了任何任意过程/方法,即使是从加载的外部模块(BPL/DLL)中反汇编,只要它们被适当地导出

从当前进程(windows loader加载的EXE映像)中,我希望获得指向入口点的有效指针

我想提出一些类似于(交互式Delphi编译器)的东西,它是通过代码查看器选项卡提供的,但来自运行Exe的实例本身


怎样才能做到呢?目前我对PE结构不太满意(但我正在努力,相信我),不知道它们是否与目的相关。

对于PE结构的阅读/写作,你可以看看开源的绝地图书馆JCL,例如:


运行实例的入口点是“System.MainInstance”?

我自己的答案:

我提出了如下工作解决方案

function TForm1.GetEntryPoint: Pointer;
var
  DosHeader: PImageDosHeader;
  NtHeaders : PImageNtHeaders;
  OptionalHeader: PImageOptionalHeader;
begin
  DosHeader := PImageDosHeader(HInstance + 0);
  NtHeaders := PImageNtHeaders(HInstance + Cardinal(DosHeader^._lfanew));
  OptionalHeader := PImageOptionalHeader(Cardinal(NtHeaders) + SizeOf(DWORD) + IMAGE_SIZEOF_FILE_HEADER);
  //
  Result := Pointer(HInstance + OptionalHeader^.AddressOfEntryPoint);
end;
旁注:

SysInit.HInstance
System.MainInstance
相同:我更喜欢它,因为它听起来更像C/C++语言,并且发现它对这个案例更有意义

从入口点反汇编时超出了
call@Halt0
指令:它被设计为反汇编函数/过程/方法,并将
ret
指令视为结束

它的寓意:


我将寻找其他更具吸引力的反汇编程序,如,并将继续进行。

谢谢您的回答。我试图从
指针(System.MainInstance)
中反汇编,但没有成功。根据Embarcadero帮助,它是主可执行文件的实例句柄:我假定它对应于Windows PE加载程序加载EXE映像的起始地址。