首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在被cl-letf覆盖的函数中调用原始函数?

在被cl-letf覆盖的函数中调用原始函数可以通过以下步骤实现:

  1. 首先,使用symbol-function函数获取被覆盖函数的原始定义。例如,如果被覆盖的函数是my-function,可以使用(symbol-function 'my-function)来获取原始定义。
  2. 将获取到的原始函数定义保存到一个变量中,以便后续调用。
  3. 在被cl-letf覆盖的函数中,通过调用保存的原始函数变量来调用原始函数。例如,如果保存原始函数定义的变量是original-function,则可以使用(funcall original-function args)来调用原始函数,其中args是传递给原始函数的参数。

下面是一个示例代码:

代码语言:txt
复制
(defun my-function ()
  (message "Original function"))

(let ((original-function (symbol-function 'my-function)))
  (cl-letf (((symbol-function 'my-function)
             (lambda ()
               (message "Modified function")
               (funcall original-function))))
    (my-function)))

在上述示例中,首先定义了一个名为my-function的原始函数。然后,使用let表达式将原始函数保存到original-function变量中。接下来,使用cl-letf覆盖my-function的定义,将其替换为一个新的函数,该新函数在调用时会先输出"Modified function",然后再调用原始函数。最后,通过调用(my-function)来测试覆盖后的函数,它会输出"Modified function"和"Original function"。

请注意,上述示例中的代码是以Emacs Lisp为例,实际上不同的Lisp方言可能有不同的语法和函数名称,但基本思路是相同的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 组件逻辑漏洞漫谈

随着社会越来越重视安全性,各种防御性编程或者漏洞缓解措施逐渐被加到了操作系统中,比如代码签名、指针签名、地址随机化、隔离堆等等,许多常见的内存破坏漏洞在这些缓解措施之下往往很难进行稳定的利用。因此,攻击者们的目光也逐渐更多地投入到逻辑漏洞上。逻辑漏洞通常具有很好的稳定性,不用受到风水的影响;但同时也隐藏得较深、混迹在大量业务代码中难以发现。而且由于形式各异,不太具有通用性,从投入产出比的角度来看可能不是一个高优先级的研究方向。但无论如何,这都始终是一个值得关注的攻击面。因此,本文就以 Android 平台为目标介绍一些常见的逻辑漏洞。

05

全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现

状态栏与导航栏属于SystemUi的管理范畴,虽然界面的UI会受到SystemUi的影响,但是,APP并没有直接绘制SystemUI的权限与必要。APP端之所以能够更改状态栏的颜色、导航栏的颜色,其实还是操作自己的View更改UI。可以这么理解:状态栏与导航栏拥有自己独立的窗口,而且这两个窗口的优先级较高,会悬浮在所有窗口之上,可以把系统自身的状态栏与导航栏看做全透明的,之所有会有背景颜色,是因为下层显示界面在被覆盖的区域添加了颜色,之后,通过SurfaceFlinger的图层混合,好像是状态栏、导航栏自身有了背景色。看一下一个普通的Activity展示的时候,所对应的Surface(或者说Window也可以)。

04
领券