首页 > 其他分享 >ida pro反编译Delphi 可变参数函数,以@LStrCatN为例

ida pro反编译Delphi 可变参数函数,以@LStrCatN为例

时间:2024-11-20 11:18:46浏览次数:1  
标签:反编译 LStrCatN Numpad 为例 Delphi 参数 ... 可变

Igor 本周提示 #51:自定义调用约定
Igor 本周提示 #101:反编译可变参数函数调用

x86 下delphi fastcall 调用约定,eax,edx,ecx,[stack args]

示例

_LstrCatN(var dest:AnsiString; argCnt: Integer; ...)
第一个参数EAX (传入 ) 指向结果。
第二个参数EDX (传入 ) 是要连接的字符串数。
所有要连接的字符串都作为指针在堆栈上传递。

当编译器选项适配Delphi时,fastcall方式便是eax,edx,ecx,[stack args] 的传参形式,
image
但如果加入...,设置可变参数则会自动忽略fastcall,因此需要通过设置usercall去限定通过寄存器传参

int __usercall LStrCatN@(void *dest@, int argCnt@, ...)

而在设定后反汇编可能无法确定可变参数,需进行调整可变参数(Adjusting variadic arguments)

With correct prototypes, decompiler usually can guess the actual arguments passed to each invocation of the function.  However, in some cases the autodetection can misfire, especially if the function uses non-standard format specifiers or does not use a format string at all. In such case, you can adjust the actual number of arguments being passed to the call. This can be done via the context menu commands “Add variadic argument” and  “Delete variadic argument”, or the corresponding shortcuts Numpad + and Numpad -.

有了正确的原型,反编译器通常可以猜测传递给函数每次调用的实际参数。但是,在某些情况下,自动检测可能会失败,特别是当函数使用非标准格式说明符或根本不使用格式字符串时。在这种情况下,您可以调整传递给调用的实际参数数量。这可以通过上下文菜单命令“添加可变参数”和“删除可变参数”或相应的快捷键 Numpad 来完成 + 和数字键盘 - 。

image

使用IDA PRO 7.6版本,新版本或许可以直接识别0.0

标签:反编译,LStrCatN,Numpad,为例,Delphi,参数,...,可变
From: https://www.cnblogs.com/DirWang/p/18556510

相关文章

  • Java防止反编译的技术方案
    背景由于Java字节码的抽象级别较高,因此它们较容易被反编译。本文介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。不同保护技术比较表以下几种技术都有不同的应用......
  • Python爬虫(爬取博客网为例)
    一、前言场景1:一个网络爬虫,顺序爬取一个网页花了一个小时,采用并发下载就减少到了20分钟。场景2:一个应用软件优化前每次打开网页需要3秒,采用异步并发提升到了200毫秒。假设一个工程的工作量为100,不采用并发编程就相当于由一个人去完成这个工作量为100的所有工作内容,可能需要1......
  • 如何理解OpenWRT上的SquashFS 和 OverlayFS 机制,它们何区别?以OpenFi 5Pro为例讲解这两
    如何理解OpenWRT上的SquashFS和OverlayFS机制,它们何区别?以OpenFi5Pro为例讲解这两者之间的关系,以及Linux的squashfs固件类型1.SquashFS和OverlayFS机制2.文件修改和保存原理文件修改时的行为:3.分区布局示例4.检查你的设备`overlay`使用情况5.`overlay`分......
  • 层次聚类——以凝聚型层次聚类为例讲解(易懂版)
            层次聚类是一种将数据集逐步划分为层次结构的方法,是一种无监督学习方法最终形成一颗树状图(dendrogram),可以直观地表示不同数据点之间的聚类关系。它是一种无监督学习方法。层次聚类的两种方法凝聚型(自底向上):这是最常见的方法,从每个数据点开始,将它们作为单独......
  • 【鸣潮,原神PC端启动器】仿二次元手游PC端游戏启动器,以鸣潮为例。
    二游GAMELanucher启动器1.前言许多二次元手游(原神,鸣潮,少女前线)的PC端启动器都是使用Qt做的,正好最近正在玩鸣潮,心血来潮,便仿鸣潮启动器,从头写一个。先下载一个官方版的PC启动器,找到图标,背景图等素材,然后对着界面写代码就行。效果如下2.划分模块游戏启动器大致可以......
  • 充电桩基础设施的时空大数据分析:以深圳市为例
    随着全球对可持续交通解决方案的需求不断增长,电动汽车(EV)作为减少交通领域碳排放的重要手段,受到了广泛的关注。然而,电动汽车的普及和发展面临着诸多挑战,其中充电基础设施的建设和管理尤为关键。为了更好地理解和解决这些问题,本篇文章利用ST-EVCDP和ST-EVCDP-v2数据集进行深入的......
  • Linux CPU 拓扑结构之调度域 调度组 - 以8核ARM big.Little架构处理器为例
    CPU拓扑结构简介SMTLevel超线程处理器的一个核心MCLevel多核CPU的一个核心DIELevel一个物理CPU的晶片(注意不是package,package是封装好了的,肉眼看到的CPU处理器)(覆盖系统所有的CPU(CPU0~CPUN))cpu最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu......
  • Vue自定义指令详解——以若依框架中封装指令为例分析
    自定义指令在Vue.js中,自定义指令提供了一种非常灵活的方式来扩展Vue的功能。以下是对Vue中自定义指令的详细解释:一、自定义指令的基本概念自定义指令允许开发者直接对DOM元素进行低层次操作,而无需编写大量的模板或者JavaScript代码。它们可以响应Vue的响应式系统,从而在数据......
  • 私域流量时代下的新型商业模式:以开源链动 2 + 1 模式、AI 智能名片、S2B2C 商城小程序
    摘要:本文探讨了私域流量时代的特点及其对商业盈利模式的影响。通过分析从大众消费时代到私域流量时代的转型,阐述了商品到“人”的变化过程。同时,深入研究了开源链动2+1模式、AI智能名片和S2B2C商城小程序源码在私域流量发展中的作用和意义,揭示这些新型模式和技术如何助......
  • AI 扩展开发者思维方式:以 SQL 查询优化为例
    在现代软件开发中,AI技术的兴起让开发者的思维方式发生了显著变化。尤其是在SQL查询优化、代码重构以及算法设计等领域,AI提供的建议不仅扩展了开发者的思考路径,还帮助他们发现以往没有意识到的潜在解决方案。1.传统思维模式下的SQL查询过去,开发者在编写SQL查询时通常......