Delphi – BPL中的unmangle名称

Delphi – BPL中的unmangle名称,第1张

概述是否有可能在Delphi中取消这些名称? 如果是这样,我在哪里可以获得更多信息? 无法在dbrtl100.bpl中找到某个条目的错误消息示例 我想知道它找不到哪个确切的函数(单位,类,名称,参数等). ---------------------------myApp.exe - Entry Point Not Found---------------------------The proce 是否有可能在Delphi中取消这些名称?
如果是这样,我在哪里可以获得更多信息?

无法在dbrtl100.bpl中找到某个条目的错误消息示例
我想知道它找不到哪个确切的函数(单位,类,名称,参数等).

---------------------------myApp.exe - Entry Point Not Found---------------------------The procedure entry point @Dbcommon@GettablenameFromsqlEx$qqrx17System@WIDeString25Dbcommon@IDENTIFIEROption Could not be located in the dynamic link library dbrtl100.bpl. ---------------------------OK   ---------------------------

我知道它是Dbcommon单元中的方法GettablenameFromsqlEx(我有Delphi和RTL / VCL源代码),但有时我会遇到并非所有代码都可用的应用程序(是的,客户应该总是购买第三方的所有源代码)东西,但有时他们没有).

但是说这是一个我没有代码的示例,或者只有接口文件(BDE.INT任何人?)
它有什么参数(即哪个潜在的过载)?
它有什么回报类型?

对于任何Delphi版本,这种修复是否相同?

–jeroen

编辑1:

感谢Rob Kennedy:tdump -e dbrtl100.bpl可以解决问题.根本不需要-um:

C:\windows\system32>tdump -e dbrtl100.bpl | grep GettablenameFromsqlExfile STDIN:00026050 1385 04AC __fastcall Dbcommon::GettablenameFromsqlEx(const System::WIDeString,Dbcommon::IDENTIFIEROption)

编辑2:

感谢TOndrej发现了这个German EDN article(English Google Translation).
那篇文章非常准确地描述了格式,应该可以创建一些Delphi代码来解决这个问题.

皮蒂,作者提到的网站(和电子邮件)现在已经死了,但很高兴知道这些信息.

–jeroen

解决方法 Delphi没有提供任何函数名称的功能,我不知道它在任何地方都有记录. Delphi in a Nutshell提到“tdump”实用程序有一个-um开关,使其找不到符号.我从来没有尝试过.
tdump -um -e dbrtl100.bpl

如果这不起作用,那么解开自己看起来并不是一个非常复杂的方案.显然,名称以“@”开头,后跟单位名称和函数名称,由另一个“@”符号分隔.该函数名后跟“$qqrx”,然后是参数类型.

参数类型使用类型名称的字符计数进行编码,后跟相同的“@” – 分隔格式.

标记函数名称的结尾和参数类型的开头需要“$”.剩下的谜团是“qqrx”部分.这是由文章Tondrej found揭示的.“qqr”表示调用约定,在这种情况下是寄存器,a.k.a.fastcall. “x”适用于参数,意味着它是常量.

返回类型不需要在受损函数名中进行编码,因为重载不会考虑返回类型.

总结

以上是内存溢出为你收集整理的Delphi – BPL中的unmangle名称全部内容,希望文章能够帮你解决Delphi – BPL中的unmangle名称所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1277823.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存