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

时间:2013-02-01 19:55:46

标签: 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

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

1 个答案:

答案 0 :(得分:6)

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

使用资源编辑器查看更多内容。表单资源将显示在RCData |下TMyForm用于名为TMyForm的表单类。然后,您可以从可执行文件中提取资源并将其保存到磁盘。使用Delphi附带的convert实用程序将其转换为文本,并通过-t来执行此操作。然后编辑文本.dfm。然后使用-b选项将其转换回二进制以进行转换。然后更新可执行文件,您就完成了。

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