【问题标题】:Delphi assembly callsDelphi 汇编调用
【发布时间】:2012-05-03 11:24:49
【问题描述】:

我一直在 IDA 中使用一些 Delphi 程序集。

我注意到很多我不理解的系统调用,并且找不到任何关于它们的文档。 例如:我注意到很多对未知函数 LStrClr(void *) 的调用。

我能找到的最好的是这个网站http://www.delphibasics.co.uk/ByLetter.asp?Letter=A 但它缺少很多函数调用,包括 LStrClr。

非常感谢您的回复, 迈克尔·恩斯特勒。

【问题讨论】:

    标签: delphi assembly reverse-engineering system-calls basm


    【解决方案1】:

    LStrClr 表示清除长字符串。它用于清除长字符串变量。换句话说,当你写:

    s := '';
    

    然后编译器将生成对运行时支持函数_LStrClr 的调用。在 Unicode Delphi 中,它将是 _UStrClr,其中 U 表示 UnicodeString,而不是 AnsiString

    这方面没有官方文档,因为它都是私有的实现细节。但是,有 Delphi RTL 的源代码。如果你提到那个,这样的调用很容易理解。

    【讨论】:

    • @MichaelEngstler - 你没有提到你使用的是什么版本的 Delphi。这些低级调用(“实现细节”)在不同版本(例如 8 位/Win32 Borland Delphi 7 和本机 Unicode Embarcadero XE2 之间)可能而且可能会有很大差异;))。
    • _LStrXXX() 函数始终与 AnsiString 一起使用(以及 D2009+ 中基于 AnsiString 的类型,例如 UTF8StringRawByteString)。自首次引入AnsiString 以来,这一点并没有改变。 UnicodeString 使用 _UStrXXX() 函数,WideString 使用 _WStrXXX 函数。 32 位与 64 位没有区别。
    猜你喜欢
    • 2016-01-16
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多