Delphi到ASM - 如何在ASM中创建对象?

Van*_*s S 0 delphi assembly reverse-engineering

我在delphi中有一个对象,看起来像:

  object DXDraw: TDXDraw
    Left = 0
    Top = 0
    Width = 640
    Height = 360
    AutoInitialize = True
    AutoSize = False
    Display.BitCount = 16
    Display.FixedBitCount = True
    Display.FixedRatio = True
    Display.FixedSize = False
    Options = [doFullScreen, doAllowReboot, doWaitVBlank, doHardware, 
        doRetainedMode, doDrawPrimitive, doSelectDriver, doTexture, 
        doRGB, doMono]
    SurfaceHeight = 360
    OnInitialize = DXDrawInitialize
    TabOrder = 1
    Visible = False
    OnClick = LbBackScreenClick
    OnDblClick = DXDrawDblClick
    OnDragDrop = FormDragDrop
    OnDragOver = FormDragOver
    OnKeyPress = EdFocusKeyPress
    OnMouseDown = LbBackScreenMouseDown
    OnMouseMove = LbBackScreenMouseMove
    OnMouseUp = LbBackScreenMouseUp
  end
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚这在ASM中会是什么样子.特别是选项.我找到了它的枚举表,但它似乎只是被读过来了.我有兴趣删除doFullScreen标志.

Dav*_*nan 6

没有与.dfm表单文件关联的汇编程序代码..dfm文件中的属性将转换为二进制.dfm资源,然后链接到可执行文件.在运行时,表单持久性代码使用RTTI加载资源并动态处理其内容.

使用资源编辑器查看更多信息.表单资源将显示在RCData |下 TMyForm用于名为的表单类TMyForm.然后,您可以从可执行文件中提取资源并将其保存到磁盘.使用convert随Delphi提供的实用程序将其转换为文本,然后传递-t给它.然后编辑文本.dfm.然后使用-b转换选项将其转换回二进制.然后更新可执行文件,您就完成了.

@Remy指出了一个更简单的解决方案.使用支持Delphi .dfm文件的资源编辑器,例如XN Resource Editor.这包装并保护您免受上述所有细节的影响.

  • 或者使用支持DFM资源的资源编辑器,如XN资源编辑器. (7认同)